HttpModule Init 方法何时在 ASP.NET 集成模式下运行?
Posted
技术标签:
【中文标题】HttpModule Init 方法何时在 ASP.NET 集成模式下运行?【英文标题】:When HttpModule Init method runs in ASP.NET Integrated mode? 【发布时间】:2011-12-19 09:54:11 【问题描述】:我编写了一个 HttpModule,它是一个 NHibernate 会话提供程序。它只是在 HttpModule 的 Init 方法中打开一个 SessionFactory,并在 BeginRequest 中获取一个新的 Session,并在 EndRequest 中将其关闭。另一方面,我在 Global.asax 中编写了一个方法,该方法使用来自这个名为 GetData 的 HttpModule 的会话。我在 Global.asax 的 Init 方法中运行该方法 (GetData)。问题是当我在集成模式下使用我的 HttpModule 时,我的 HttpModule 在运行 Global.asax 的 Init 方法之前似乎没有初始化。
我已经搜索了这些方法的运行顺序和事件的生命周期,但没有找到任何有用的东西!
【问题讨论】:
【参考方案1】:在 IIS 7.x 中,模块和处理程序应在 web.config
文件中的 system.webServer
xml 元素中注册。
查看这篇 MSDN 文章:
http://msdn.microsoft.com/en-us/library/ms227673.aspx【讨论】:
我知道。我使用这种语法在集成模式下注册模块。这不是问题。 @alisabzevari 然后检查 IIS 配置。无论如何,很难帮助您获取您的问题信息...【参考方案2】:ASP.NET 对何时调用 HttpModule Init() 方法不提供任何保证(与静态初始化程序不同)。一般来说,应该使用 Init() 方法来连接事件处理程序,任何“实际工作”都应该在事件处理程序中完成。
在处理下一个事件之前,从所有 HttpModule (包括 Global.asax)调用特定事件的所有已注册事件处理程序——因此您可以通过这种方式控制顺序。
【讨论】:
以上是关于HttpModule Init 方法何时在 ASP.NET 集成模式下运行?的主要内容,如果未能解决你的问题,请参考以下文章
[Log]ASP.NET之HttpModule 事件执行顺序
ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析
ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析
ASP.NET 管道事件与HttpModule, HttpHandler简单理解