在IIS7中,Application_BeginRequest和Application_PreRequestHandlerExecute之间会发生什么?

时间:2011-02-17 20:40:56

标签: asp.net iis

我在ASP.Net IIS应用程序上有一些带有时间戳的跟踪语句,可以获得大量流量。我在我的Global.asax中的Application_BeginRequest末尾和Application_PreRequestHandlerExecute的开头有跟踪语句。偶尔在BeginRequest结束和PreRequestHandlerExecute开始之间有一个很大的延迟,即超过5秒。

在这两个方法调用之间的HttpRequest生命周期中可能会花费多长时间?这是Windows Server 2008上的IIS7。

感谢。

1 个答案:

答案 0 :(得分:6)

如果BeginRequest已经发生且延迟发生在PreRequestHandlerExecute之前,您可能希望记录线程ID。如果它不同,则会受到ASP.NET线程敏捷性的影响。

发生这种情况的原因可能是使用会话。 ASP.NET在HttpContext.Current.Session上使用读写器锁。如果您写入此变量,则具有相同会话的所有其他请求不能同时运行并停在队列中。 .NET使用轮询机制来检查是否释放了会话锁。

我还建议您检查一下您是否在发布版本和system.web/compilation/@debug ='false'上构建