Мы затрагиваем несколько пользователей в ASP.NET, когда мы устанавливаем Thread CurrentCulture/CurentUICulture?
Когда мы устанавливаем CurrentCulture и/или CurrentUICulture, мы делаем это в текущем потоке следующим образом:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
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.
Ответы
Ответ 1
Rocky Lhotka блог об этом самом вопросе несколько лет назад - и сообщил, что Скотт Гатри сказал ему это:
ASP.NET гарантирует, что даже если они переключите свою нить, Текущая премия и культура свойства из исходной резьбы переносите в новую нить. Эта автоматически, и вам не нужно беспокоиться о потере этих ценностей. Уф!
Однако локальное хранилище потоков не переносится вперед.
В статье содержится более интересный материал (он описывает обстоятельства, в которых ASP.NET переключит потоки - по крайней мере, с 2006 года), и это определенно стоит прочитать. К сожалению, Rocky не предоставляет ссылку на авторитетный источник. Отражатель здесь не очень помогает, так как все соответствующие методы заканчиваются в естественных вызовах.
Сказав это, это имеет смысл: API сильно подразумевает, что текущая культура переносится через коммутаторы контекста, такие как текущий директор, и я никогда не видел, чтобы ASP.NET противоречила ожидаемому поведению.
Ответ 2
В стандартном ASP.NET я использовал поля страницы UICulture and Culture. Контексты потоков затем изменяются, так как в потоке выполняются разные части запроса.
Говоря, что я не знаком с тем, как MVC управляет им, но я считаю, что он должен применяться в представлении, и учитывая, что представления - это страницы просмотра, которые наследуются со страницы, они будут иметь UICulture и Culture как по стандарту ASP.NET...
Говоря все это, не принимайте это как Евангелие, как я уже сказал, я не много сделал с ASP MVC...