2010-05-19 14 views
9

Lorsque nous avons la CurrentCulture et/ou CurrentUICulture nous le faisons sur le fil en cours comme celui-ci:Affectons-nous plusieurs utilisateurs dans ASP.NET lorsque nous définissons le thread CurrentCulture/CurentUICulture?

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Doest cela signifie que nous pourrait affecter les paramètres de culture de plusieurs utilisateurs de notre application Web que leurs demandes peuvent réutiliser les threads de la piscine?

Je travaille sur une application ASP.NET MVC où chaque utilisateur peut avoir son propre paramètre de culture spécifié dans ses données de compte. Lorsque l'utilisateur se connecte, le paramètre de culture est extrait de la base de données et doit être défini comme culture actuelle. Mon inquiétude est que la définition de la culture en cours sur le thread en cours peut affecter une autre requête utilisateur réutilisant ce thread. Je suis encore plus préoccupé par la lecture de ceci:

ASP.NET not only uses a thread pool, but may switch threads during request processing.

Répondre

5

Rocky Lhotka il y a plusieurs années blogged about this very question - et a rapporté que Scott Guthrie lui a dit ceci:

ASP.NET assure que, même si ey passer votre fil, le CurrentPrincipal et la culture propriétés du fil d'origine reporter au nouveau fil. Ce est automatique, et vous n'avez pas besoin de s'inquiéter de perdre ces valeurs. Ouf!

Toutefois, le stockage local du thread ne se poursuit pas.

L'article contient du matériel plus intéressant (il décrit les circonstances dans lesquelles ASP.NET sera fils de commutateur - au moins à partir de 2006), et il vaut vraiment la peine de lire. Malheureusement, Rocky ne fournit pas de lien vers une source faisant autorité. Reflector n'est pas non plus utile ici, puisque toutes les méthodes pertinentes se terminent par des appels natifs. Cela dit, cela a du sens: l'API implique fortement que la culture actuelle est transmise à travers les commutateurs de contexte, comme le principal actuel, et je n'ai jamais vu ASP.NET contredire le comportement attendu.

+0

Merci pour le lien vers ce billet de blog. C'est vraiment intéressant et efface la deuxième partie de mes soucis - la commutation de thread se produit pendant une seule requête seulement quand une opération d'asynch doit être exécutée, ainsi au moins ceci n'est pas aléatoire et comme la culture est reportée, elle devrait ne pas être un problème. Ce qui reste est la recherche de threads du pool lorsqu'une nouvelle requête arrive, mais si nous considérons que nous mettons la culture pour chaque requête dans OnActionExecuting, alors cela ne pose pas de problème non plus. – Nikolay

0

Dans ASP.NET I standard utilisé les champs de page uiculture et la culture. Les contextes de threads sont ensuite modifiés lorsque différentes parties de la requête sont exécutées sur le thread. En disant que je ne suis pas familier avec la façon dont MVC le gère, mais je pense qu'il devrait être appliqué dans la vue, et étant donné que les vues sont des pages qui héritent de la page, elles auront UICulture et Culture selon la norme ASP.NET ...

En disant tout cela, ne prenez pas cela comme évangile, comme je le dis, je ne l'ai pas fait beaucoup avec ASP MVC ...