If you’ve tried to squeeze MVC into a WebForms project which uses ScriptManager elements for AJAX functionality, be sure to add some hardcore IgnoreRoute entries in your route registration section.
If you don’t then you’ll find the calls to your asmx webservice that ScriptManager creates will receive 404 errors looking for asmx/js or asmx/jsdebug that contain an HTTPException which looks like:
The controller for path blah.asmx/js was not found or does not implement IController
or if you’re in debug mode
The controller for path blah.asmx/jsdebug was not found or does not implement IController
This basically means that the pattern {folder}/{file}.asmx/{something} isn’t matching a route. Since it shouldn’t match one then you need to make sure you add in an exception.
Ignore a specific file type
This one didn’t actually work for me as expected, but is worth listing here:
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
Ignore an entire folder
This brute force attack worked for me:
routes.IgnoreRoute("{folder}/{*pathInfo}", new { folder = "WebServices" });
Strangeness
I didn’t need to add in the IgnoreRoute on one IIS7 instance but did on another IIS7 server. Not sure why, probably due to HTTPHandler configuration within IIS itself?