IIS不会从web.config加载自定义HTTP模块


18

我有一个从Web.config加载的ASP.NET MVC3网站的自定义HTTP模块:

<system.web>
    <httpModules>
      <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
    </httpModules>
</system.web>

当我从VS Web服务器中运行站点时,模块已正确加载(命中了我的Init方法中的断点),但是当我将其托管在IIS中时,它似乎被忽略了(断点丢失并且模块的功能不存在来自网站)。我已经在两个单独的IIS盒上尝试过,结果相似。

我究竟做错了什么?是否有我必须启用IIS才能从站点的web.config加载模块的设置?

Answers:


25

我问了这个问题后不久,我就发现了这一点-IIS7对web.config使用了不同的架构。现在,加载模块的正确位置是:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>

3
遇到了同样的问题,这篇文章帮助我解决了这个问题。我确实发现需要同时保留system.web / httpModules和system.webServer / modules,以使我的自定义模块在本地开发服务器和生产服务器上都可以工作。
伊多·冉

哇!谢谢。我真的把头撞在墙上。
Alex C

3
可能的区别不是IIS6与IIS7,而是经典与集成模式。
JanZahradník's

1

我有一个类似的问题。我的解决方案涉及先删除模块,然后将其重新添加到system.webServer命名空间。

<system.webServer>
   <modules>
     <remove name="MyModule"/>
     <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
   </modules>
</system.webServer>

这可能是因为我们部署到两个不同的IIS服务器。一台在服务器2003(iis 6)上,另一台在服务器2008(iis7 +)上。因此,将模块添加到似乎会阻止其加载到名称空间中。我在这里可能是错的...


1

7年后:它不是特定于IIS版本,而是特定于应用程序池模式:经典与集成。

  <system.webServer><!--for integrated mode-->
    <modules>
      <add name="modulename" type="blabla.modulenamehere" />
    </modules>
  </system.webServer>

  <system.web><!--for classic mode-->
     <httpModules>
      <add name="modulename" type="blabla.modulenamehere" />
    </httpModules>
  </system.web>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.