为什么我的machine.config HttpModule不在我的网络应用程序中运行?

时间:2011-10-25 15:14:37

标签: .net configuration iis-7.5 httpmodule windows-server-2008-r2

我在.NET 3.5,32位Win 2003中编写了HttpModule,IIS 6运行良好。它的程序集在GAC中,配置在machine.config中。一切都很好多年。

我刚刚将它全部带到了新的.NET 2-4,64位Win 2008 R2,IIS 7.5计算机上,并在machine.config中添加了相同的旧配置。遗憾的是,该模块未列为网站上运行的模块。当我将配置直接放入站点的web.config时,它会按预期运行。 为什么我的应用程序不是从machine.config继承HttpModule?

此配置在machine.config中不执行任何操作,但在web.config中按预期工作。

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="MyModule" type="MyModule, MyAssmebly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefghijklmno" />
    </modules>
</system.webServer>

我把配置放在每个可能的machine.config文件中都无济于事:

  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config
  • C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG

更新

配置的其他元素将继承到web.config:system.web\compilationsystem.serviceModel\bindings以命名一对。该模块使用在machine.config中配置的WCF。它似乎只是HttpModule没有被继承。不,任何地方都没有<clear/>

1 个答案:

答案 0 :(得分:1)

显然,machine.config不负责定义system.webServer部分。实际上,它将该部分定义为

<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

请注意类型:System.Configuration.IgnoreSection

system.webServer部分在

中定义
%windir%\system32\inetsrv\config\applicationhost.config

直接在system.webserver部分之后,有

<location path="" overrideMode="Allow">
    <system.webServer>

    <modules>
        <!-- add the module here -->
        <add name="MyModule" type="MyNamespace.MyModule, MyAssmebly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefhijklmnop"/>

    </modules>

    </system.webServer>

</location>