我正在运行一个ASP.NET应用程序,其中包含在IIS7下注册的自定义模块。
直到两天前,一切都运行良好。现在我注意到请求开始挂起在AuthenticateRequest状态和WindowsAuthentication模块中。我的自定义模块在BeginRequest状态下截获并处理请求并使用HttpContext.Current.ApplicationInstance.CompleteRequest()完成请求处理。它没有处理的请求留给IIS让它们通过其他模块进行处理。
问题(请求挂起)发生在我的自定义模块不处理的页面中。
我应该开始解决此问题的任何想法?我今天在三台不同的机器上一直重现这个问题。我还发现我们在上个月没有更改我们的web.config文件。
非常感谢任何有关解决此问题的帮助。
提前致谢, Charles Prakash Dasari
答案 0 :(得分:0)
最后我找到了解决问题的方法。
我实现的自定义模块使用异步处理程序:
context.AddOnBeginRequestAsync(
new BeginEventHandler(BeginBeginRequest),
new EndEventHandler(EndBeginRequest)
);
在我的模块不处理请求的情况下,begin事件处理程序完成请求并且无需执行任何操作。直到几天前,我跳到另一个线程来处理这些请求在Begin方法中,最近我修复了它,这样我只有在我的模块必须处理请求时跳转到另一个线程。现在这导致了这个问题。显然IIS不喜欢我在同一个线程中完成我的处理。
所以现在我再次跳到另一个线程 - 无论如何。 IIS很高兴我的应用程序不再挂起。
我仍然需要进一步调查,并确定为什么会发生这种情况 - 或者它是否真的在IIS中或我从BeginBeginRequest方法返回IAsyncResult的方式。但是现在我知道我必须在另一个线程上处理这个请求。