2

我有一个简单的IHttpModule

using System;
using System.Web;

namespace DummyPlaceholder
{
    class PerformanceHttpModule : IHttpModule
    {
        public void Init(HttpApplication application)
        {
        }

        public void Dispose()
        {
        }
    }
}

然后你在里面注册HttpModulesweb.config

<configuration>
   <system.web>
      <httpModules>
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </httpModules>
   </system.web>
</configuration>

当我在我的 Visual Studio 2012 集成(“Cassini”)网络服务器中进行本地开发和测试时,一切都很好。

当需要部署到实时 IIS7 Web 服务器时,服务器会给出500 Internal Server Error,并且绝对没有任何关于原因的信息。

问题是 IIS7 改变了您注册HttpModules的方式,您不再使用system.web,而是现在必须使用system.webServer

<configuration>
   <system.webServer>
      <modules>
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </modules>
   </system.webServer>
</configuration>

现在这适用于 IIS,但不适用于 Visual Studio 2012。

我需要的是一种适用于两者的解决方案,而无需在web.config发布文件时对其进行修改。

问题是 IIS7 和更新版本有一个新的“集成”模式。另一种模式是 IIS6 的行为,称为“经典”模式。

显然,我需要将 Visual Studio 集成 Web 服务器置于“集成”模式,以便查看:

configuration/webServer/modules

对于模块。

我怎么做?

奖金阅读

4

2 回答 2

1

这里有一个来自 Cassini 项目的人解释说永远不会支持“集成”模块。

在遭受这个问题困扰的人的十几个问题中,有一个黑客解决方案:

在添加模块之前,您发出 aremove以删除,。system.web/httpModulesystem.webServer/module

<configuration>
   <system.web>
      <httpModules>
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </httpModules>
   </system.web>

   <system.webServer>
      <modules>
         <remove name="PerformanceHttpModule" />
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </modules>
   </system.webServer>
</configuration>
  • Cassini 仅支持第一种语法,但不理解或在第二种情况下崩溃
  • IIS 只懂第二种语法,第一种就崩溃
  • 结合它们的强大功能,您将获得一个像 Tomcat 和 WebSphere 一样经过深思熟虑的系统。
于 2013-10-03T18:45:51.463 回答
1

您可以指示 IIS7 上的集成管道模式不验证配置(即,如果元素中有内容,则不引发异常<httpModules>)。将 a<validation validateIntegratedModeConfiguration="false" />放入您的<system.webServer>元素中。

http://www.iis.net/configreference/system.webserver/validation

<configuration>
   <system.web>
      <httpModules>
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </httpModules>
   </system.web>

   <system.webServer>
      <modules>
         <remove name="PerformanceHttpModule" />
         <add name="PerformanceHttpModule" type="DummyPlaceholder.PerformanceHttpModule"/>
      </modules>
      <validation validateIntegratedModeConfiguration="false" />
   </system.webServer>
</configuration>
于 2015-04-30T21:08:58.800 回答