2

我正在运行一个带有在 IIS7 下注册的自定义模块的 ASP.NET 应用程序。

直到两天前,一切都运行良好。现在我注意到请求开始在 AuthenticateRequest 状态和 WindowsAuthentication 模块中挂起。我的自定义模块在 BeginRequest 状态下拦截并处理请求并使用 HttpContext.Current.ApplicationInstance.CompleteRequest() 完成请求处理。它不处理的请求留给 IIS 让它们通过其他模块进行处理。

问题(请求挂起)出现在我的自定义模块未处理的页面中。

我应该从哪里开始解决这个问题?今天我一直在三台不同的机器上重现这个问题。我还发现我们在上个月没有更改我们的 web.config 文件。

非常感谢您对解决此问题的任何帮助。

在此先感谢,查尔斯·普拉卡什·达萨里

4

1 回答 1

0

最后我找到了解决我的问题的方法。

我实现的自定义模块使用异步处理程序:

        context.AddOnBeginRequestAsync(
            new BeginEventHandler(BeginBeginRequest),
            new EndEventHandler(EndBeginRequest)
        );

在我的模块不处理请求的情况下,begin 事件处理程序会完成请求并且与它无关。直到几天前,我一直跳到另一个线程来处理 Begin 方法中的这些请求,最近我修复了它,只有当我的模块必须处理请求时我才跳到另一个线程。现在这导致了问题。显然 IIS 不喜欢我在同一个线程中完成我的处理。

所以现在我再次跳到另一个线程 - 不管怎样。IIS 很高兴,我的应用程序不再挂起。

我仍然需要进一步调查并确定为什么会发生这种情况 - 或者它是否真的是 IIS 中的错误,或者我从 BeginBeginRequest 方法返回 IAsyncResult 的方式。但是现在我知道我必须在不同的线程上处理这个请求。

于 2009-07-14T18:51:49.407 回答