是一个实例的HttpModule专用于一个IIS请求从开始到结束?



我正在开发一个HttpModule来捕获对我们web应用程序的所有请求的日志记录和性能信息。我点击了preequesthandlerexecutePostRequestHandlerExecute事件。

当我的代码执行PostRequestHandlerExecute即保证在与preequesthandlerexecute中先前运行的代码相同的请求上下文中执行的代码? 换句话说,在执行第二个事件期间处理要使用的第一个事件时,是否可以保留状态?

或者一个HttpModule实例可以服务多个并发请求,在这种情况下,连接这两个事件的处理所需的任何状态都需要存储(然后从)当前HttpContext中获取?

(当然,我理解,HttpModule将被用于服务多个请求顺序,并且来自较早请求的特定请求状态将与后续请求无关。)我的问题是,是否可以使用单个HttpModule来处理多个并发请求,或者我是否可以依赖于HttpModule将在该请求的整个生命周期中专用于单个请求的事实。

谢谢你的建议!

根据文献和我自己的实现,HttpModule实例确实在整个请求/响应事务生命周期中专门用于单个Http事务。

https://learn.microsoft.com/en-us/dotnet/api/system.web.httpapplication?source=recommendations&视图= netframework - 4.8 #评论

https://learn.microsoft.com/en-us/previous-versions/bb470252 (v = vs.140) ? redirectedfrom = MSDN

State可以安全地积累在一个事件中,以便在后续事件中使用,因为HttpModule实例将接收到的所有事件都属于同一个请求/响应事务。

(当然,任何特定于事务的累积状态都需要为后续事务重新初始化,因为一旦当前事务完成,HttpModule的实例就会被后续事务重用。)

我进一步看到,一个HttpModule的实例可能在不同的线程上执行,而不是在最初创建或先前执行它的线程上执行。

相关内容

最新更新