当HttpModule Init方法在ASP.NET集成模式下运行时?

时间:2011-12-19 09:54:12

标签: c# asp.net nhibernate iis-7 httpmodule

我编写了一个HttpModule,它是一个NHibernate Session Provider。它只是在HttpModule的Init方法中打开一个SessionFactory,并在BeginRequest中获取一个新的Session并在EndRequest中关闭它。另一方面,我在Global.asax中编写了一个方法,该方法使用来自此HttpModule的名为GetData的会话。我在Global.asax的Init方法中运行该方法(GetData)。问题是当我在集成模式下使用我的HttpModule时,似乎我的HttpModule在运行Global.asax的Init方法之前没有初始化。

我已经搜索了运行这些方法和事件生命周期的顺序,但没有找到任何有用的东西!

2 个答案:

答案 0 :(得分:3)

在IIS 7.x中,模块和处理程序应在system.webServer文件的web.config xml元素中注册。

查看此MSDN文章:

答案 1 :(得分:2)

ASP.NET没有对何时相互调用HttpModule Init()方法提供任何保证(与静态初始化器不同)。通常,Init()方法应该用于连接事件处理程序,任何“实际工作”都应该在事件处理程序中完成。

特定事件的所有已注册事件处理程序都会从​​所有HttpModule中调用,包括Global.asax,然后再转到下一个事件 - 这样您就可以通过这种方式控制订单。