Ormai il progetto MONO ha raggiunto una notevole maturita', e la compatibilita' con il framework .NET di Microsoft e' abbastanza alta.

Trovandomi ultimamente a sviluppare in ASP.NET (e non essendo 'pro-microsoft' un po' mi brucia dover ammettere che la piattaforma .NET il suo lavoro lo fa bene!) mi sono posto una domanda: posso far girare le mie applicazioni ASP.NET su Apache utilizzando MONO?

Beh, a quanto pare e' possibile!

Partiamo dal mio server di sviluppo:

GNU/Linux Fedora Core 2

Apache 2.0.51

Facendo una rapida ricerca sul sito del Progetto MONO trovo un po' di pacchetti RPM che fanno al caso mio:

    1. mono-core-1.1.9-0.novell.i586.rpm (download)
    2. mono-data-1.1.9-0.novell.i586.rpm (download)
    3. mono-web-1.1.9-0.novell.i586.rpm (download)
    4. xsp-1.1.9-0.novell.noarch.rpm (download)
    5. mod_mono-1.1.9-0.fedora3.novell.i386.rpm (download)

    Per evitare problemi con le dipendenze, i suddetti pacchetti vanno installati (utilizzando il comando rpm --install nomepacchetto) nello stesso ordine in cui li ho elencati.

    I primi 3 pacchetti (mono-core, mono-data, mono-web) contengono il 'cuore' della piattaforma MONO, quindi il compilatore C#, le librerie di classi e il RunTime.

    Il pacchetto xsp-1.1.9-0.novell.noarch.rpm installa XSP, un piccolo WebServer scritto in C# e con la possibilita' di servire pagine Asp.Net.XSP verra' utilizzato da Apache, con l'aiuto del modulo mod_mono (installato dall'ultimo pacchetto) che si occupera' di rendere possibile il 'collegamento'.

    Una volta effettuata l'installazione dei pacchetti, testiamo che tutto sia andato a buon fine. Per prima cosa diamo uno sguardo a cosa e' stato installato e dove:

      Compilatore C#/usr/bin/mcs
      RunTime Mono/usr/bin/mono
      Librerie di Classi/usr/lib/mono
      Binari di XSP/usr/lib/xsp
      Scripts di avvio di XSP/usr/bin/xsp/usr/bin/xsp2
      Pagine ASP.Net di esempio/usr/lib/xsp/test
      mod_mono.so /etc/httpd/modules/

    Proviamo quindi a compilare un semplicissimo programma in C#, il celebre 'Ciao, Mondo!':

    CiaoMondo.cs

    public class CiaoMondo{ public static void Main() { System.Console.WriteLine("Ciao, Mondo!"); }}

    Una volta creato il file, lo compiliamo e lo mandiamo in esecuzione:

    [andrea@patroclo mono]$ mcs CiaoMondo.cs[andrea@patroclo mono]$ lsCiaoMondo.cs CiaoMondo.exe[andrea@patroclo mono]$ mono CiaoMondo.exeCiao, Mondo![andrea@patroclo mono]$

    Testiamo XSP

    Se il test precedente e' andato a buon fine, sia il compilatore che il RunTime di MONO sono stati installati correttamente.

    A questo punto possiamo provare ad avviare XSP:

    [andrea@patroclo mono]$ cd /usr/lib/xsp/test[andrea@patroclo test]$ xspxspListening on port: 8080Listening on address: 0.0.0.0Root directory: /usr/lib/xsp/testHit Return to stop the server.

    Ci siamo posizionati nella directory dove sono presenti le pagine di esempio e abbiamo avviato XSP direttamente da li (XSP, infatti, cerca le pagine da servire direttamente nella directory dalla quale viene invocato): caricando con un browser l'indirizzo http://nomeserver:8080/ verranno quindi presentate le pagine di esempio contenute in /usr/lib/xsp/test.

    Integriamo il tutto con Apache

    L'ultimo passo da compiere e' interfacciare Apache con XSP in modo da permettergli di processare correttamente le pagine ASP.NET.

    Modifichiamo quindi /etc/httpd/conf/httpd.conf e aggiungiamo in fondo alla sezione dove vengono dichiarati i moduli la seguente riga:

    LoadModule mono_module modules/mod_mono.so

    Aggiungiamo anche

    ## ASP.Net#MonoServerPath /usr/lib/xsp/2.0/mod-mono-server2.exe

    Alias /samples "/usr/lib/xsp/test"MonoApplications "/samples:/usr/lib/xsp/test"

    SetHandler mono

    creando cosi' un alias /samples sul webserver che puntera' alla cartella con le pagine di esempio trattata prima.

    A questo punto riavviamo Apache

    [root@patroclo root]# /etc/init.d/httpd restartInterruzione di httpd: [ OK ]Avvio di httpd: [ OK ][root@patroclo root]#

    apriamo il browser e puntiamo su http://nomeserver/samples: dovrebbe apparire la lista delle pagine di esempio visualizzata nel precedente test di XSP.

    L'installazione di Mono su Apache ora e' terminata, l'unica cosa da fare e' aggiungere altri alias sulla configurazione di Apache in modo da definire bene dove deve operare Mono.

    Ad esempio, se volessimo installare sul nostro Apache una applicazione chiamata Pippo, dovremmo aggiungere al file di configurazione le seguenti righe:

    Alias /Pippo "/var/www/html/Pippo/"MonoApplications "/Pippo:/var/www/html/Pippo/" SetHandler mono

    e, una volta riavviato Apache, copiare nella directory /var/www/html/Pippo/ la nostra applicazione ASP.NET.