8
votes

Une demande dans IIS fonctionnera-t-elle sur un seul fil?

Nous avons un système qui fonctionne dans IIS.

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.

Une façon de le faire est de spécifier la culture à chaque fois que nous faisons une totring.

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?


0 commentaires

4 Réponses :


3
votes

Si vous savez que vous voulez que la culture reste la même pour tous les threads, cela devrait être une approche fine.

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 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.


1 commentaires

Est-il vraiment possible que dans un seul bloc de méthode, il y a un changement de fil?



19
votes

non. ASP.NET expose l'agilité de fil - 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.)

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.

Cependant, quelque Tests que j'ai couru il y a quelque temps ( Recherchez "JSKEET" dans la page) suggère que thread.Currentculture est préservé même lorsque l'agilité de thread commence.


1 commentaires

Je me demande WOW Ceci est affecté si vous avez désactivé le navigation Web?



2
votes

Changez-vous de manière dynamique la culture? Sinon, vous pouvez définir la culture dans le fichier web.config. XXX PRE>

Vous pouvez également la définir au niveau de la page: P>

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");


0 commentaires

1
votes

Comme d'autres ont souligné, ASP.NET peut décider de traiter des parties de la la même demande dans différents threads . Cependant, vous parlez d'initialisation des trucs thread-statiques au début de chaque méthode , 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 , votre approche devrait donc être bonne.


0 commentaires