asp.net mvc3 запрос потока - PullRequest
       40

asp.net mvc3 запрос потока

10 голосов
/ 02 января 2012

Я использую собственный механизм IoC в моем приложении asp.net mvc3 (на IIS7), который сохраняет состояние в полях [ThreadStatic] и, следовательно, полагается на то, что HttpApplication.BeginRequest, HttpApplication.EndRequest и все синхронное выполнение(один) запрос, к которому они относятся, выполняются в одном и том же потоке.

Это предположение верно?

1 Ответ

9 голосов
/ 02 января 2012

Является ли это предположение правильным?

Нет, это предположение не верно и есть свидетельство для него.Единственный надежный механизм хранения по запросу в ASP.NET - HttpContext.Items.

Никогда не используйте [ThreadStatic] поля для хранения значений по запросу в приложении ASP.NET.Например, если у вас есть асинхронный контроллер, вы вполне можете заставить движок отрисовать один запрос из пула потоков, чтобы начать обслуживать запрос, затем инициировать асинхронную операцию, основанную на IOCP (порт завершения ввода / вывода), и, наконец, нарисовать другой поток избассейн, чтобы закончить запрос.Таким образом, вы можете иметь 2 разных потока, обслуживающих один и тот же HTTP-запрос.

Абсолютно никогда не полагайтесь на тот факт, что HTTP-запрос будет обслуживаться одним и тем же потоком.

Это может быть правдой в некоторых случаях для синхронных запросов, но помните, что это просто деталь реализации.Это может измениться без какого-либо уведомления от одной версии .NET к другой.Вы никогда не должны полагаться на это и никогда не использовать [ThreadStatic] в ASP.NET.Это может сильно укусить тебя.

...