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

标签 .net asp.net asp.net-mvc visual-studio cassini

我正在调试在 .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 的原因是什么?

我知道原因可能是“异步”页面指令(请参阅 Do ASP.NET Requests always BeginRequest and EndRequest on the same thread? ,但我的页面指令中没有“异步”属性)。

一定还有其他原因。

谢谢!

最佳答案

ASP.NET 是 thread-agile一般来说。您不应该假设整个请求将在一个线程中处理。使用 HTTP 上下文而不是线程静态变量。

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

关于.net - Cassini (VS WebDev) 在不同线程上执行 BeginRequest 和 EndRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4468607/

相关文章:

.net - wcf AddressAlreadyInUseException

.net - 我应该在数据访问层中保留sqlconnection吗?

javascript - 验证下拉列表以根据所选选项获取正确的日期

javascript - 如何设置文本框的货币格式?

javascript - 单击按钮后重复/添加 div

asp.net-mvc - 没有 [required] 属性的 Razor 验证触发

c# - 不要在选中的子项上关闭 ToolStripDropDownButton

c# - 在 JSON.NET 中修剪 json 字符串

javascript - 将 ArrayList 转换为 JavaScript 表

asp.net-mvc - 响应中不存在 RequestVerificationToken cookie