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

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

我有一个用于 ASP.NET MVC3 网站的自定义 HTTP 模块,我正在从 web.config 加载:

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

当我从 VS Web 服务器内部运行站点时,模块可以正确加载(我的 Init 方法中的断点被命中),但是当我在 IIS 中托管它时,它似乎被忽略了(断点被错过,站点中缺少模块的功能)。我在两个单独的 IIS 框上尝试过,结果相似。

我做错了什么?我是否需要点击某个设置来启用 IIS 以从站点的 web.config 加载模块?

答案1

我问完这个问题后很快就明白了——IIS7 对 web.config 使用了不同的架构。现在加载模块的正确位置是:

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

答案2

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>

答案3

我遇到了类似的问题。我的解决方案是先删除模块,然后将其重新添加到 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+)上。因此,添加模块似乎会阻止它在命名空间中加载。我可能错了...

相关内容