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> 
相關問題