Cassini (VS WebDev) выполняет BeginRequest и EndRequest в разных потоках - PullRequest
2 голосов
/ 17 декабря 2010

Я отлаживаю приложение ASP.NET MVC 2, работающее в .NET 4.0 (Windows 7), в настоящее время внутри Cassini, отладочного веб-сервера Visual Studio.

Все работало хорошо, когда я неожиданнобыли исключения в моем обработчике Application.EndRequest.Изучив эту проблему, я обнаружил, что причина в том, что Cassini вызывала EndRequest в другом потоке, чем BeginRequest (тогда переменная ThreadStatic, которая была установлена ​​в BeginRequest и использовалась в обработчике EndRequest, была нулевой, поскольку в этом потоке BeginRequest никогда не былcall).

В чем может быть причина того, что Cassini может выполнить BeginRequest и EndRequest в разных потоках?

Я знаю, что причиной может быть директива страницы Async (см. Do ASP.NET всегда запрашивает BeginRequest и EndRequest в одном и том же потоке? , но у меня нет атрибута 'Async' в моих директивах Page).

Должна быть другая причина.

Спасибо!

1 Ответ

5 голосов
/ 17 декабря 2010

ASP.NET - это с поддержкой потоков в целом.Не следует предполагать, что весь запрос будет обработан в одном потоке.Используйте контекст HTTP вместо статических переменных потока.

Хотя есть только определенные места, где поток может переключаться во время обработки запроса, рекомендуется избегать любых предположений IMO.

...