views:

770

answers:

1

This is not an MVC topic. I have an ASP.NET Application which performs URL Routing in the Application_Start method.

The routing looks like:

RouteTable.Routes.Add(new Route(
  "Profile/{query}",
  new RouteValueDictionary() { {"query",string.Empty} },
  new GenericRouteHandler("~/ProfileHttpHandler.ashx")
));

A GenericRouteHandler looks implements GetHttpHandler with:

var page= (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
...
return page;

And ProfileHttpHandler.ashx is just a Visual Studio template. It sets Content-type to "text/plain" and writes "hello world."

This application works correctly while debugging in Visual Studio (on the ASP.NET development server). A GET http://localhost:59474/Profile/abc123 routes to the http handler as expected.

However, when this app is published to a remote machine running IIS 7 in Integrated Pipeline mode, the process fails. I get HTTP 500 errors when attempting to GET anything inside the apps folder, including Default.aspx.

Web.Config is configured as such:

<system.web>
  <httpModules>
    <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>
</system.web>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </modules>
</system.webServer>

Lastly; I'm unsure whether this is relevant information. In my web service provider's control panel, I have the directory which this application resides in configured as a virtual directory. It has the properties:

  • mydomain.ca/routeapp: Folder in your Hosting Space (domain.ca\wwwroot\routeapp)
  • Allow Anonymous Access: On.
  • Enable Integrated Windows Authentication: On.
  • Enable Basic Authentication: On.
  • ASP: Disabled.
  • ASP.NET: 2.0 Integrated Pipeline.
  • PHP: Disabled.
  • Perl: Enabled.
+1  A: 

You can try to add this to your web.config file

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
</system.webServer>

For more information on this check the iis forum thread.

Branislav Abadjimarinov
I didn't include that in my OP because I didn't know it was relevant. Yet, it is already included in my web.config file.
Kivin
It seems I'm not destined to get routing working with WebForms. I've ported my project over to MVC and am having much less trouble. In the name of closing this thread, I'm assigning this as the accepted answer.
Kivin