【问题标题】:Cassini (VS WebDev) executing BeginRequest and EndRequest on different threadsCassini (VS WebDev) 在不同线程上执行 BeginRequest 和 EndRequest
【发布时间】:2011-05-26 23:58:24
【问题描述】:

我正在调试一个在 .NET 4.0 (Windows 7) 上运行的 ASP.NET MVC 2 应用程序,目前在 Cassini 中,Visual Studio 调试 Web 服务器。

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

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

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

肯定还有别的原因。

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2010-12-25
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多