views:

395

answers:

2

I am developing an ASP.NET MVC 2 web site, targeted for .NET Framework 4.0, using Visual Studio 2010.

My web.config contains the following code:

<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>

When I use Build > Publish to put the web site on my local IIS7 instance, it works great.

However, when I use Debug > Start Debugging, neither the HTTP handler nor module are executed on any requests.

Strangely enough, when I put the handler and module <add /> tags back into <system.web /> under <httpHandlers /> and <httpModules />, they work. This seems to imply that the development web server is running in classic mode.

How do I fix this?

+2  A: 

you dont. webdev.webserver.exe does not and cannot support integrated pipeline.

so, if you have code that cannot be written to perform in both environments you will need to use a local iis for dev.

basically, system.web is the place to configure webdev server and iis5-6 handlers and modules. webserver is for iis7 handlers and modules, as you know.

Reference:

Each request in WebDev.WebHost40 (and previous versions) is processed by HttpRuntime.ProcessRequest which does not support integrated pipeline mode. This is the method used in all three versions of WebHost.WebServer.dll (the core of WebDev.WebServer.exe)

And the word of some dude who is fairly familiar with the inner workings of cassini/webdev by virtue of managing this project. ;-)

Sky Sanders
I'll assume you're right, but would be happier with a source for this statement.
Domenic
@Domenic - update answer
Sky Sanders
There we go :D. Thanks!
Domenic
+1  A: 

I'm not sure if I'm too late in answering, but while it's known fact that the Cassini server doesn't support integrated pipeline mode, you can still test locally using the classic pipeline by adding it to the httpModules section of system.web in your web.config:

  <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>

You'd probably want to remove the httpModules section from your production web.config.

Bullines