Влияет ли мы на нескольких пользователей в ASP.NET, когда устанавливаем Thread CurrentCulture / CurentUICulture? - PullRequest
10 голосов
/ 19 мая 2010

Когда мы устанавливаем CurrentCulture и / или CurrentUICulture, мы делаем это для текущего потока следующим образом:

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

Значит ли это, что мы можем повлиять на настройки культуры нескольких пользователей нашего веб-приложения, поскольку их запросы могут повторно использовать потоки из пула?

Я работаю над приложением ASP.NET MVC, где у каждого пользователя могут быть собственные настройки языка, указанные в данных его учетной записи. Когда пользователь входит в систему, параметр культуры извлекается из базы данных и должен быть установлен в качестве текущей культуры.

Меня беспокоит то, что установка текущей культуры в текущем потоке может повлиять на запрос другого пользователя, повторно использующего этот поток. Я еще больше обеспокоен чтением этого:

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

Ответы [ 2 ]

6 голосов
/ 24 мая 2010

Роки Лхотка писал об этом же вопросе несколько лет назад и сообщил, что Скотт Гатри сказал ему следующее:

ASP.NET гарантирует, что даже если они переключи свою нить, Текущийпринципал и культура свойства из оригинальной темы перенести в новую тему. это является автоматическим, и вам не нужно беспокоиться о потере этих ценностей. Уф!

Однако локальное хранилище потока не переносит.

Статья содержит более интересный материал (он описывает обстоятельства, при которых ASP.NET будет переключать потоки - по крайней мере, с 2006 года), и его определенно стоит прочитать. К сожалению, Рокки не предоставляет ссылку на авторитетный источник. Reflector здесь тоже не сильно помогает, так как все соответствующие методы заканчиваются родными вызовами.

Сказав это, это имеет смысл: API строго подразумевает, что текущая культура передается через переключатели контекста, как и текущий принципал, и я никогда не видел, чтобы ASP.NET противоречил ожидаемому поведению.

0 голосов
/ 24 мая 2010

В стандартном ASP.NET я использовал поля страницы UICulture и Culture. Затем контексты потока изменяются, когда в потоке выполняются разные части запроса.

Говоря, что я не знаком с тем, как MVC управляет им, но я считаю, что его следует применять в представлении, и, учитывая, что представления являются представлениями, которые наследуются от страницы, они будут иметь UICulture и Culture по стандарту ASP.NET ...

Говоря все это, не воспринимайте это как Евангелие, как я уже сказал, я мало что сделал с ASP MVC ...

...