我有一个用于 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+)上。因此,添加模块似乎会阻止它在命名空间中加载。我可能错了...