2011-12-19 58 views
2

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

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

回答

2

ASP.NET不提供任何保证,当HTTP模块的init()方法被称为相对于彼此(不同于静态初始化) 。一般来说,应该使用Init()方法来连接事件处理程序,并且应该在事件处理程序中完成任何“真正的工作”。

在转到下一个事件之前,所有已注册的特定事件的事件处理程序都将从所有HttpModules(包括Global.asax)中调用,因此您可以通过这种方式控制订单。

3

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

检查这个MSDN文章:

+0

我知道。我用这个语法在集成模式下注册模块。这不是问题。 – alisabzevari 2011-12-20 07:32:32

+0

@alisabzevari然后检查IIS配置。无论如何,很难帮助你解决你的问题。 – 2011-12-20 08:53:57

相关问题