Ok, het aan de praat krijgen van een mvc project op iis6 is geen pretje. Vandaar deze post, wellicht kan ik jullie wat ellende besparen.
Ik moest de website op een 2003 server installeren.
Zorg dat de volgende mvc assemblies terecht komen in de bin directory (copy local = true)
- system.web.abstractions
- system.web.routing
- system.web.mvc
zorg ook dat alle verwijzingen in je code naar resources door mvc worden berekent, met bijvoorbeeld ResolveUrl(). Zodra je de site test op een andere machine, kom je erachter dat je (ik iig) toch een paar links bent vergeten, zoals stylesheets of images.
Het grootste probleem met IIS6 is dat deze niet de clean url's ondersteunt wat mvc zo krachtig maakt.
Product/Details/5 wordt dan Product.mvc/Details/5
IIS6 verwacht namelijk altijd een extensie. Ik heb de mapping van de routes dan ook aangepast zodat deze .mvc bevat:
routes.MapRoute(
"Default.mvc", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
new { controller = @"[^\.]*" } // Parameter constraints - Do not allow dots in the controller name
);
In de startpagina default.aspx heb ik in de code behind weer een redirect met .mvc staan:
Response.Redirect("~/Home.mvc/Index");
Op de server moet je nog instellen dat .mvc extensies worden afgehandeld door de aspnet_isapi filter.
Er is ook een andere mogelijkheid waarbij je wel de clean url's houdt, namelijk door alles te laten afhandelen door deze isapi filter. Het nadeel is wel dat dit (aanzienlijk) ten koste gaat van de performance.
Er is ook nog een oplossing die gebruik maakt van best of both worlds: ISAPI_rewrite. Dit stukje software vangt de binnenkomende requests (clean url's), en stuurt deze door naar IIS met de mvc extensie. En zonder nadelige gevolgen voor de performance. Het is wel de lastigste oplossing om te implementeren.
meer info:
deploying asp.net mvc to iis6
How to enable pretty urls with Asp.Net MVC and IIS6
using asp.net mvc on iis6 without the mvc extension
uitleg over url routing
using asp.net mvc with different versions of iis (pdf)