Wenn wir die CurrentCulture und / oder CurrentUICulture setzen, machen wir das auf dem aktuellen Thread wie folgt:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
Bedeutet das, dass wir die Kultureinstellungen mehrerer Benutzer unserer Webanwendung beeinflussen könnten, da ihre Anfragen die Threads aus dem Pool wiederverwenden können?
Ich arbeite an einer ASP.NET MVC-Anwendung, bei der für jeden Benutzer eine eigene Kultureinstellung in seinen / ihren Kontodaten angegeben werden kann. Wenn sich der Benutzer anmeldet, wird die Kultureinstellung aus der Datenbank abgerufen und muss als aktuelle Kultur festgelegt werden.
Meine Sorge ist, dass das Setzen der aktuellen Kultur auf den aktuellen Thread sich auf eine andere Benutzeranfrage auswirken kann, die diesen Thread wiederverwendet. Es macht mir noch mehr Sorgen, dies zu lesen:
ASP.NET not only uses a thread pool, but may switch threads during request processing.
Rocky Lhotka hat vor einigen Jahren über diese Frage gebloggt - und berichtet, dass Scott Guthrie ihm folgendes gesagt hat:
ASP.NET stellt sicher, dass, selbst wenn sie wechseln Sie Ihren Thread, die CurrentPrincipal und Kultur Eigenschaften aus dem ursprünglichen Thread weiter zum neuen Thread. Dies ist automatisch, und Sie müssen nicht Sorge darüber, diese Werte zu verlieren. Puh!
Thread-lokaler Speicher wird jedoch nicht übertragen.
Der Artikel enthält mehr interessantes Material (er beschreibt die Umstände, unter denen ASP.NET Threads wechseln wird - zumindest ab 2006), und es ist definitiv lesenswert. Leider bietet Rocky keinen Link zu einer autoritativen Quelle. Reflector ist hier auch nicht viel hilfreich, da alle relevanten Methoden in nativen Calls enden.
Nachdem das gesagt wurde, macht es Sinn: Die API impliziert stark, dass die aktuelle Kultur über Kontextwechsel übertragen wird, wie der aktuelle Prinzipal, und ich habe noch nie gesehen, dass ASP.NET dem erwarteten Verhalten widerspricht.
In Standard-ASP.NET verwendete ich die Seitenfelder UICulture und Culture. Thread-Kontexte werden dann geändert, wenn verschiedene Teile der Anfrage auf dem Thread ausgeführt werden.
Wenn ich sage, dass ich nicht weiß, wie MVC es handhabt, würde ich meinen, dass es in der Ansicht angewendet werden sollte, und da Ansichten Ansichten sind, die von der Seite erben, haben sie UICulture und Culture as per ASP.NET-Standard ...
Wenn Sie all das sagen, nehmen Sie das nicht als Evangelium, wie ich sage, ich habe nicht viel mit ASP MVC getan ...
Tags und Links asp.net-mvc globalization localization