2010-05-19 7 views
9

Wenn wir die Current gesetzt und/oder CurrentUICulture wir tun dies für den aktuellen Thread wie folgt aus:Beeinflussen wir mehrere Benutzer in ASP.NET, wenn wir ThreadCurrentCulture/CurentUICulture festlegen?

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

Doest das, dass wir die Kultur Einstellungen mehrerer Benutzer unserer Web-Anwendung als ihre Anträge beeinflussen könnten kann die Threads aus dem Pool wiederverwenden?

Ich arbeite an einer ASP.NET MVC-Anwendung, in der jeder Benutzer eigene Kultur Einstellung in seinen/ihren Kontodaten angegeben hat. Wenn sich der Benutzer anmeldet, wird die Kultureinstellung aus der Datenbank abgerufen und muss als aktuelle Kultur festgelegt werden.

Meine Sorge ist, dass die aktuelle Kultur auf dem aktuellen Thread Einstellung kann eine andere Benutzeranforderung beeinflussen diesen Thread wiederverwendet. Ich bin noch besorgte Lektüre dieses:

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

Antwort

5

Rocky Lhotka blogged about this very question vor einigen Jahren nicht viel getan - und berichtete, dass Scott Guthrie ihm folgendes sagte:

ASP.NET stellt sicher, dass, auch wenn th ey Thread wechseln , die Current und Kultur Eigenschaften aus dem ursprünglichen Thread führen uns auf den neuen Thread. Diese ist automatisch, und Sie müssen nicht sorgen über diese Werte verlieren. Wütend!

jedoch Thread-Local Storage trägt nicht nach vorne.

Der Artikel enthält interessantes Material (er beschreibt die Umstände, unter denen ASP.NET wird Schalter Themen - zumindest ab 2006), und es zu lesen auf jeden Fall wert ist. Leider bietet Rocky keinen Link zu einer autoritativen Quelle. Reflector ist hier auch nicht viel hilfreich, da alle relevanten Methoden in nativen Calls enden.

Wenn das gesagt wird, macht es Sinn: Die API bedeutet stark, dass die aktuelle Kultur über Kontextwechsel, wie der aktuelle Prinzipal, übertragen wird, und ich habe ASP.NET nie widersprechen dem erwarteten Verhalten.

+0

Danke für den Link zu diesem Blogbeitrag. Es ist wirklich eine interessante und löscht den zweiten Teil meiner Sorgen - die Thread-Umschaltung geschieht während einer einzigen Anfrage nur dann, wenn eine Asynch-Operation durchgeführt werden muss, also ist dies zumindest nicht zufällig und wie die Kultur weitergeführt wird, sollte es kein Problem sein. Was bleibt, ist die Wiederaufnahme von Threads aus dem Pool, wenn eine neue Anfrage eintrifft. Wenn wir jedoch in Betracht ziehen, dass wir die Kultur für jede Anfrage in OnActionExecuting setzen, dann ist dies wahrscheinlich auch kein Problem. – Nikolay

0

In Standard ASP.NET ich die Seitenfelder UICulture und Kultur verwendet. Thread-Kontexte werden dann geändert, wenn verschiedene Teile der Anfrage auf dem Thread ausgeführt werden.

Mit dem sagen, dass ich nicht vertraut bin, wie MVC es verwaltet, aber ich würde denken, dass es in der Ansicht angewendet werden sollte, und da Ansichten Ansichten sind, die von Seite erben, werden UICulture und Culture per ASP.NET Standard ...

sagen, dass alle, nicht dies als Evangelium nehmen, wie ich sage, habe ich mit ASP MVC ...