Cassini(VS WebDev)在不同的线程上执行BeginRequest和EndRequest

che*_*ica 2 .net asp.net asp.net-mvc cassini visual-studio

我正在调试运行在.NET 4.0(Windows 7)上的ASP.NET MVC 2应用程序,该应用程序目前位于Visual Studio调试Web服务器Cassini内部.

当我在Application.EndRequest处理程序中突然出现异常时,一切运行良好.在研究了这个问题后,我发现原因是Cassini在与BeginRequest不同的线程上调用EndRequest(然后,在BeginRequest中设置并在EndRequest处理程序中使用的ThreadStatic变量为null,因为在此线程上,BeginRequest从未所谓的).

Cassini在不同的线程上执行BeginRequest和EndRequest的原因是什么?

我知道其中的原因可能是"异步" Page指令(见同一个线程?上的执行ASP.NET请求始终的BeginRequest和EndRequest,但我有我的页面指令没有"异步"属性).

必须有另一个原因.

谢谢!

Jon*_*eet 5

ASP.NET通常是线程敏捷的.您不应该假设整个请求将在一个线程中处理.使用HTTP上下文而不是线程静态变量.

虽然在请求处理期间只有某些地方线程可以切换,但最好避免做出任何假设IMO.