我正在使用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服务器以经典模式运行。
我该如何解决这个问题?
答案 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
等操作或导致异常的操作。