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简单理解

HttpModule和HttpHandler -- 系列文章

我可以从 HttpModule 实例中放弃 InProc ASP.NET 会话吗