Archivio

Posts Tagged ‘asp.net mvc’

ASP.NET MVC e Aruba

8 luglio 2010 3 commenti

Nel post precedente ho parlato della pubblicazione del nostro nuovo sito, realizzato con il framework ASP.NET MVC, su un piano di hosting condiviso di Aruba.

Innanzitutto c’è da dire che tra le guide di Aruba non risulta nulla relativamente ad ASP.NET MVC. Dopo aver letto però un po’ di articoli, menzionati alla fine del post, che riportavano delle procedure grazie alle quali la pubblicazione andava a buon fine, abbiamo pensato di provare.

Ecco quello che abbiamo fatto per portare a termine l’impresa:

Come prima cosa bisogna fare in modo che gli assembly del framework MVC vengano correttamente caricati anche sul server. Per fare ciò da Visual Studio bisogna aprire la cartella delle Reference nel nostro progetto web e cercare questi 3 assembly:

System.Web.Abstraction

System.Web.Mvc

System.Web.Routing

Figura 1

Dopo averli selezionati dalla finestra delle proprietà modifichiamo la voce “Copy local” a “True”, in modo che durante il build del progetto i 3 assembly vengano copiati nella cartella “bin”.

Il secondo grosso problema è che i server Aruba hanno IIS 6.0 e quando ricevono gli URL generati da MVC non riescono a risolverli perchè non sono mappati a delle pagine fisiche memorizzate sul server. L’unica soluzione possibile, anche se non è molto elegante, è quella di aggiungere l’estensione .aspx a tutti gli URL del nostro sito.

Per farlo dobbiamo modificare le regole di routing presenti nel file Global.asax.cs (o Global.asax.vb) in questo modo:

public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default", // Route name
        "{controller}.aspx/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = "" } // Parameter defaults
    );
}

aggiungendo l’estensione .aspx.

Passiamo ora al problema successivo. Digitando l’indirizzo del mio sito (es. www.matteopenna.it) si riceve un messaggio “404 – Non trovato”.

L’unico modo per risolvere anche questo problema è quello di aggiungere alla root del progetto un nuovo Web Form e chiamarlo index.aspx.

Nel code-behind di questo file, aggiungere il seguente codice nell’evento Page_Load:

protected void Page_Load(object sender, EventArgs e) {
    Context.Response.Redirect("home.aspx", true);
}

in modo che la richiesta alla pagina iniziale del sito venga rediretta al controller Home ed alla action predefinita.

Ci rimangono più solo da modificare tutti gli Html.ActionLink e gli Html.RenderPartial presenti nelle nostre View nel modo seguente:

<% System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(this.Html, "LogOnUserControl"); %>
<%= System.Web.Mvc.Html.LinkExtensions.ActionLink(this.Html, "Home", "Index", "Home") %>

Nel caso avessimo dei link scritti a mano nel codice dobbiamo ricordarci di aggiungere il suffisso .aspx al nome del controller.

A questo punto facendo un rebuild del progetto e una pubblicazione sul nostro server Aruba tutto dovrebbe funzionare.

Ringrazio gli autori dei seguenti articoli per avermi aiutato non poco nel risolvere questo problema:

http://stefanopaluello.spaces.live.com/blog/cns!B706E2DAF7520268!594.entry

http://www.klopfenstein.net/lorenz.aspx/deploying-an-asp-net-mvc-website-on-iis-6-and-net-2-0.

Categorie:aruba, asp.net mvc Tag: ,