Prethodnih dana par kolega me upitalo za savjet vezan za upload ASP.NET MVC aplikacija sa development računala na hosting providere te stoga otud ideja za ovaj nešto kratak, ali nadam se koristan post. Još ne tako davno kad sam počeo s MVC pričom sjećam se da mi je posebne glavobolje stvarao upravo trenutak prebacivanja aplikacije i njeno uspješno pokretanje. Naime, na lokalnom računalu bi sve radilo kao švicarski sat, ali kad bi istu aplikaciju pokušao osposobiti na serveru, katastrofa. Ili bi server vraćao HTTP 404 ili 500. Otud totalna averzija prema ta 2 naizgled simpatična broja. No pređimo na stvar. Slijedi kratki recept podijeljen u dva dijela. Prvi je onaj jednostavan koji se tiče novog IIS (Internet Information Service) 7.0 servera gdje je postupak prebacivanja užasno jednostavan i bezbolan, dok je drugi u slučaju kada koristite IIS 6 (iznenadili bi se kako većina domaćih hosting providera još nema u ponudi verziju 7) gdje su potrebne određene modifikacije.
Scenarij #1 - Windows Server 2008 R2 i Internet Information Service 7.0 (7.5)
Ovdje nema nekih posebnih napomena. Postupak je prilično jednostavan. Svoju aplikaciju, tj. njene odgovarajuće datoteke jednostavno prebacite na server na kojem ste prethodno preko nekakvog control panela (npr. Dot Net Panel) kreirali novi "web site". Ukoliko nemate mogućnost kreiranja, slobodno pošaljite mail korisničkoj podršci i oni će za vas napraviti poseban direktorij odnosno mjesto gdje ćete uploadati svoju aplikaciju. Idealno bi bilo da tokom kreiranja "web site-a" odaberete ASP.NET 4. Naravno ukoliko isti podržava vaš hosting provider. Ali 99% ukoliko imaju u ponudi Windows 2008 server onda imaju i .NET 4. U nastavku kako to izgleda preko Website panel-a :

Ukoliko se radi o .NET 3.5 verziji aplikacije onda nastavite s čitanjem jer će biti potrebno dodati par .DLL-ova unutar BIN foldera.
EDIT 1 - Internet Information Service 7 mora biti pokrenut u Integrated modu!
Scenarij #2 - Windows Server 2003 i Internet Information Service 6
Dolazimo do drugog slučaja, tj. situacije kada vaša aplikacija treba biti pokrenuta na Windows Server-u 2003. Naime tu dolazi do određenog problema sa URL rutama te server ne izvršava aplikaciju kako bih trebao. Ali prije toga, upute što napraviti ako je vaša aplikacija pisana za .NET 3.5 framework.
1. korak - Uključivanje MVC .dll-ova u /BIN folder.

Unutar Solution Explorera odabrati References i u njemu odabrati tri gore navedena .dll-a koja su potrebna za pokretanje ASP.NET MVC aplikacije. Nakon što ste ih odabrali, unutar Properties dijela unutar opcije Copy Local odabrati True. Pokrenite aplikaciju čime ćete uspješno kopirati potrebne .dll-ove u vaš /BIN direktorij koji ćete uploadati na vaš hosting.
Korak 2 - modifikacija ASP.NET MVC ruta (routes) unutar Global.asax datoteke
Time smo rješili 50% posla te nam još ostaje rješiti problem s rutama. Naime, problem nastaje kada želite pozvati URL www.nekastranica.hr/proizvodi/krevet/10 . Windows server 2003 bezuspješno će tražiti takvu lokaciju na serveru te će vam vratiti grešku 404. Da bi tome doskočili trebamo modificirati Global.asax datoteku, odnosno moramo promijeniti izgled definiranih ruta. Ja ću to prikazati na primjeru jedne, ali za sve ostale ide isti princip.
1: public static void RegisterRoutes(RouteCollection routes)
2: {
3: routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
4:
5: routes.Add(new Route("{controller}.mvc.aspx/{action}",
6: new MvcRouteHandler()) { Defaults = new RouteValueDictionary(new { controller = "Home" }) }
7: );
8:
9: routes.MapRoute(
10: "Default", // Route name
11: "{controller}.mvc.aspx/{action}", // URL with parameters
12: new { controller = "Home", action = "Index", id = "" } // Parameter defaults
13: );
14:
15: }
Ukoliko pogledate liniju broj 11, vidjet ćete da novu definiciju rute. Umjesto klasičnog {controller}/{action} pravila stavili smo {controller}.mvc.aspx/{action} . Sada IIS neće stvarati nikakve probleme vezano za rute i ukoliko je sve dobro prošlo vaša bi se ASP.NET MVC aplikacija trebala uredno izvršavati. Naravno uvijek postoji ali, tj. mogućnost pojavljivanja neke druge greške ili slično. Gornji primjeri su autoru osobno pomogli u 80% slučajeva tako da će nadam se i vama.
Toliko za danas. Ukoliko naiđete na bilo kakvu grešku ili slično slobodno komentirajte. I ja sam ipak samo čovjek. Sljedeći post će također obuhvaćati ASP.NET MVC rute, odnosno pokazati ću vam kako možete definirati svoje rute unutar XML datote, a ne koristeći Routes.MapRoute() metodu unutar Global.asax datoteke. Renato out....