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

Visual studio VS2010开发web服务器不使用集成模式HTTP处理程序/模块,visual-studio,httphandler,web-config,httpmodule,Visual Studio,Httphandler,Web Config,Httpmodule,我正在使用Visual Studio 2010开发一个针对.NET Framework 4.0的ASP.NET MVC 2网站 My web.config包含以下代码: <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="XhtmlModule" type="DomenicDenicola.Website.XhtmlModule"

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

My 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 Debug
时,HTTP处理程序和模块都不会对任何请求执行

奇怪的是,当我将处理程序和模块
标记放回
下的
中时,它们就工作了。这似乎意味着开发web服务器正在经典模式下运行


如何修复此问题?

您不需要WebDev.WebServer.exe不支持也不能支持集成管道

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

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

参考

WebDev.WebHost40(和以前的版本)中的每个请求都由
HttpRuntime.ProcessRequest
(). 这是所有三个版本的WebHost.WebServer.dll(WebDev.WebServer.exe的核心)中使用的方法


还有一句话是,通过管理,谁对卡西尼/WebDev的内部运作相当熟悉

我不确定我是否回答得太晚了,但尽管Cassini服务器不支持集成管道模式这一众所周知的事实,但您仍然可以使用经典管道进行本地测试,方法是将其添加到web.config中system.web的httpModules部分:

  <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部分。

今天在visual studio 2012中运行时获得了此功能。找到原因是VisualStudio发布了2010年附带的旧web服务器,如上所述,它无法在那里工作。右键单击属性,选择“Web”选项卡并选择IIS Express选项,即可更改为IIS Express。然后,启动调试模式将在IIS Express中启动,这将非常支持诸如
Request.Headers.Add
或导致异常的任何操作。

我假设您是对的,但是如果有此语句的源代码,我会更高兴。我尝试按照您的建议在web.config中添加模块,它仍然抛出PlatformNotSupported异常。在我的例子中,我试图在HttpModule的事件上使用Headers.Remove()。使用VS2010。值得注意的是,如果出于任何原因(例如,公司安全禁止)无法启用IIS Express,将
Request.Headers.Add()
更改为
Request.AddHeaders()
通常也会解决此问题。