这只是另一个“在开发服务器中工作,为什么不在IIS中工作”类型问题。
我使用NHibernate创建了一个很好的DAL described here。在创建ISession时,我将一个事件处理程序连接到HttpApplication.EndRequest来处理清理它。
但是,我将我的网站部署到IIS,它说:
事件处理程序只能在IHttpModule初始化期间绑定到HttpApplication事件。
我完全理解消息的内容,但我无法解释原因。
我可以随时订阅Button
的活动,为什么我不能订阅HttpApplication
的活动?
如果有人能够对此有所了解,我将非常感激。
我也很想知道,为什么它与开发服务器兼容而不是IIS 7?
编辑:
现在两个月过去了,我还没有收到任何有用的答案。 :(
这个问题真的很难吗?
答案 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初始化之外绑定事件,我不知道。