我编写了一个HttpModule,它是一个NHibernate Session Provider。它只是在HttpModule的Init方法中打开一个SessionFactory,并在BeginRequest中获取一个新的Session并在EndRequest中关闭它。另一方面,我在Global.asax中编写了一个方法,该方法使用来自此HttpModule的名为GetData的会话。我在Global.asax的Init方法中运行该方法(GetData)。问题是当我在集成模式下使用我的HttpModule时,似乎我的HttpModule在运行Global.asax的Init方法之前没有初始化。
我已经搜索了运行这些方法和事件生命周期的顺序,但没有找到任何有用的东西!
答案 0 :(得分:3)
在IIS 7.x中,模块和处理程序应在system.webServer
文件的web.config
xml元素中注册。
查看此MSDN文章:
答案 1 :(得分:2)
ASP.NET没有对何时相互调用HttpModule Init()方法提供任何保证(与静态初始化器不同)。通常,Init()方法应该用于连接事件处理程序,任何“实际工作”都应该在事件处理程序中完成。
特定事件的所有已注册事件处理程序都会从所有HttpModule中调用,包括Global.asax,然后再转到下一个事件 - 这样您就可以通过这种方式控制订单。