我在.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\compilation
和system.serviceModel\bindings
以命名一对。该模块使用在machine.config
中配置的WCF。它似乎只是HttpModule
没有被继承。不,任何地方都没有<clear/>
。
答案 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>