为什么事件处理程序只能在IHttpModule初始化期间绑定到HttpApplication事件?

时间:2010-05-06 13:15:00

标签: .net asp.net nhibernate iis iis-7

这只是另一个“在开发服务器中工作,为什么不在IIS中工作”类型问题。

我使用NHibernate创建了一个很好的DAL described here。在创建ISession时,我将一个事件处理程序连接到HttpApplication.EndRequest来处理清理它。

但是,我将我的网站部署到IIS,它说:

事件处理程序只能在IHttpModule初始化期间绑定到HttpApplication事件。

我完全理解消息的内容,但我无法解释原因。

我可以随时订阅Button的活动,为什么我不能订阅HttpApplication的活动?

如果有人能够对此有所了解,我将非常感激。

我也很想知道,为什么它与开发服务器兼容而不是IIS 7?

编辑: 现在两个月过去了,我还没有收到任何有用的答案。 :(
这个问题真的很难吗?

3 个答案:

答案 0 :(得分:3)

您正在尝试在其初始化管道之外使用HttpApplication。只是不要这样做。如错误所示,在IHttpModule初始化期间绑定您的事件。

答案 1 :(得分:0)

因为IIS7对HTTP应用程序的启动方式有一些变化(基本上是关联的工作进程及其HTTP应用程序)。

查看http://n2cms.codeplex.com/Thread/View.aspx?ThreadId=38311

如果您在经典模式或集成模式下使用web.config中的以下项运行IIS7,它应该可以正常工作:

<configuration>
   <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
   </system.webServer>
</configuration>

(从http://code.google.com/p/n2cms/source/browse/trunk/src/wwwroot/Web.config剪下)

答案 2 :(得分:0)

如果它在您的开发环境中运行,而不是在您的IIS上运行,则可能是您(使用Cassini开发服务器)。该服务器远没有IIS那样的行为。

另一种解决方案是使用IIS Express,它提供与旧版Cassini开发服务器相同的Visual Studio集成(至少从2010年开始),同时表现得更像IIS。 IIS Express在Microsoft网站上提供了独立安装程序,并且还包含在最新版本的Visual Studio中。

那是为了&#34;为什么&#34;在你的第一个问题上。

至于为什么禁止在IHttpModule初始化之外绑定事件,我不知道。