Nous avons un système qui fonctionne dans IIS. P>
Le système doit toujours exécuter en utilisant la même "culture", mais nous ne pouvons pas compter sur les paramètres du serveur définis corrects. P>
Une façon de le faire est de spécifier la culture à chaque fois que nous faisons une totring. P>
Cependant, nous nous demandions, est-il possible de définir la culture sur un fil au début d'une méthode et de compter sur tout le code dans cette méthode étant exécutée sur le même thread? P>
4 Réponses :
Si vous savez que vous voulez que la culture reste la même pour tous les threads, cela devrait être une approche fine. P>
Toutefois, si vous avez besoin de définir la culture, dites, une base par requête pouvant être différente d'une demande à l'autre, qui peut potentiellement em> ne pas être une approche fiable. Sous une charge élevée, nous avons vu des threads réutilisés pour plusieurs demandes et demandes migrées d'un fil à un autre, laissant leur culture (et d'autres informations threadstatiques) derrière. P>
Est-il vraiment possible que dans un seul bloc de méthode, il y a un changement de fil?
non. ASP.NET expose l'agilité de fil em> - dans certaines situations, la demande peut passer d'un thread à un autre à des points spécifiques dans son cycle de vie de demande. (Ce n'est pas "juste n'importe où"; Ce blog post donne plus Détails spécifiques.) P>
Malheureusement, cela n'est pas aussi clairement documenté que cela pourrait être, et il est relativement difficile de provoquer - afin que vous puissiez facilement entrer dans la situation dans les charges de test, tout va bien - mais dans la production, les choses vont mal. P >
Cependant, quelque Tests que j'ai couru il y a quelque temps ( Recherchez "JSKEET" dans la page) suggère que thread.Currentculture code> est préservé même lorsque l'agilité de thread commence. P>
Je me demande WOW Ceci est affecté si vous avez désactivé le navigation Web?
Changez-vous de manière dynamique la culture? Sinon, vous pouvez définir la culture dans le fichier web.config. Vous pouvez également la définir au niveau de la page: P> Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Comme d'autres ont souligné, ASP.NET peut décider de traiter des parties de la la même demande em> dans différents threads em>. Cependant, vous parlez d'initialisation des trucs thread-statiques au début de chaque méthode em>, de sorte que cette restriction ne s'applique pas à vous: je suis tout à fait sûr que ASP.NET ne peut pas modifier le fil actuel Au milieu de l'une de vos méthodes em>, votre approche devrait donc être bonne. P>