VS2010开发Web服务器不使用集成模式HTTP处理程序/模块

时间:2010-04-25 12:25:49

标签: visual-studio httphandler web-config httpmodule

我正在使用Visual Studio 2010开发一个针对.NET Framework 4.0的ASP.NET MVC 2网站。

我的web.config包含以下代码:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="XhtmlModule" type="DomenicDenicola.Website.XhtmlModule" />
    </modules>
    <handlers>
        <add name="DotLess" type="dotless.Core.LessCssHttpHandler,dotless.Core" path="*.less" verb="*" />
    </handlers>
</system.webServer>

当我使用Build > Publish将网站放在我的本地IIS7实例上时,效果很好。

但是,当我使用Debug > Start Debugging时,HTTP处理程序和模块都不会对任何请求执行。

奇怪的是,当我将处理程序和模块<add />标记放回<system.web /><httpHandlers />下的<httpModules />时,它们可以正常工作。这似乎意味着开发Web服务器以经典模式运行。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:22)

你没有。 WebDev.WebServer.exe 不支持也不支持集成管道。

因此,如果您的代码无法在两种环境中执行,则需要使用本地IIS进行开发。

基本上,system.web是配置webdev服务器和IIS5-6处理程序和模块的地方。正如您所知,system.webServer适用于IIS7处理程序和模块。

<强>参考

WebDev.WebHost40 (以及之前的版本)中的每个请求都由HttpRuntime.ProcessRequest处理  (which does not support integrated pipeline mode)。这是 WebHost.WebServer.dll 的所有三个版本中使用的方法( WebDev.WebServer.exe的核心

some dude的词语通过管理this project而非常熟悉Cassini / WebDev的内部运作。 ; - )

答案 1 :(得分:4)

我不确定我是否来不及回答,但是已知事实是Cassini服务器不支持集成管道模式,您仍然可以使用经典管道在本地测试,方法是将其添加到httpModules部分web.config中的system.web:

  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    .
    .
    .
    <!-- HTTP Modules using Classic Pipeline -->
    <httpModules>
      <add name="YourHttpModule" type="ACME.YourHttpModule"/>
    </httpModules>
  </system.web>

  <system.webServer>
    <!-- HTTP Modules using Integrated Pipeline -->
    <modules runAllManagedModulesForAllRequests="true">
      <add name="YourHttpModule" type="ACME.YourHttpModule"/>
    </modules>
  </system.webServer>

您可能希望从生产web.config中删除httpModules部分。

答案 2 :(得分:4)

今天在visual studio 2012中运行时得到了这个。发现原因是visual studio推出了2010年附带的旧网络服务器,如上所述,它无法在那里工作。右键单击属性,选择“Web”选项卡,然后选择“IIS Express”选项,将其更改为IIS Express。然后启动调试模式将在IIS Express中启动,这显然支持Request.Headers.Add等操作或导致异常的操作。