0

我在.NET 3.5,32位Win 2003,IIS 6中写了一个HttpModule,效果很好。它的程序集位于GAC中,配置位于machine.config中。多年来一切都很好。为什么我的machine.config HttpModule不能在我的web应用程序中运行?

我只是把它带到一个新的.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

UPDATE

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

+0

什么是应用程序池的网站是坐在模式? –

+0

你试过把它放在全局'web.config'中,而不是'machine.config'吗? – Oded

+0

你重新启动了服务器吗?通常它不是必需的,但是如果它是一个值得重试的测试服务器。 – Aliostad

回答

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 

直接的​​节之后定义,有

<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> 
相关问题