ASP.NET è un framework per lo sviluppo di applicazioni web lato server sviluppato in casa Microsoft basato sul framework .NET. Grazie a questa caratteristica, è possibile sviluppare pagine, web services ed applicazioni usando qualsiasi linguaggio compatibile con il CLR (Common Language Runtime) di .NET (ad esempio, C#, VB.Net, ecc).
Rilasciato per la prima volta nel 2002 insieme alla versione 1.0 del .NET Framework, in qualità di successore della tecnologia ASP (Active Server Pages), è oggi giunto alla versione 4.7.2 stabile.
Sebbene l'ambiente naturale per lo sviluppo e l'esecuzione di applicazioni ASP.NET sia Windows Server, è possibile sviluppare e/o eseguire applicazioni .NET anche in ambiente Unix/Linux.
ASP.NET in ambiente Unix
Un'applicazione ASP.NET necessita di due componenti software per la propria esecuzione: un runtime .NET ed un server web che supporti tale tecnologia. In ambiente Microsoft, tali compiti sono assolti rispettivamente dalla CLR (Common Language Runtime) e dal server IIS (Internet Information Services).
L'alternativa in ambiente Unix è rappresentata dal progetto Mono e dal server web Apache.
Mono
Mono è una implementazione libera ed open source del framework .NET. A differenza dell'implementazione disponibile in ambiente Windows, Mono è compatibile con diversi sistemi operativi (Unix e non), tra i quali citiamo Linux, *BSD, macOS, Solaris, Android, iOS, Windows ed altri. Questa caratteristica ha ulteriormente agevolato lo sviluppo e la diffusione della piattaforma .NET permettendo di fatto la scrittura di applicazioni multipiattaforma con un minimo sforzo. Un'applicazione .NET può infatti essere compilata solo una volta e poi essere eseguita da qualunque sistema che disponga della CLR di Mono, senza ulteriori adattamenti, ricompilazioni, ecc.
Sebbene il progetto sia nato come reimplementazione indipendente del framework .NET, esso è oggi guidato da Xamarin una sussidiaria di Microsoft. Facendo seguito alle politiche di apertura nei confronti della comunità open source intraprese a partire dal 2014, Microsoft ha ufficialmente concesso a Xamarin di poter implementare (e rilasciare sotto licenza open-source) delle porzioni della specifica .NET che sarebbero altrimenti protette da brevetti (e quindi, non riproducibili).
Allo stato attuale, Mono è compatibile con la maggior parte delle funzionalità offerte dal framework 4.7, ad eccezione dei framework WPF (Windows Presentation Foundation), difficilmente re-implementabile su altre piattaforme a causa della sua stretta dipendenza con le librerie DirectX, WF (Windows Workflow Fundation) e WCF (Windows Communication Foundation).
Il supporto alle tecnologie ASP.NET e Windows Forms è garantito da uno stack apposito integrato in Mono, il Microsoft Compatibility stack.
Apache mod_mono
Per eseguire applicazioni ASP.NET con il web server Apache, è necessario installare il modulo mod_mono. Il modulo si limita a redirigere le richieste verso un processo esterno chiamato mod_mono_server. Questo processo si occupa di gestire le richieste, eseguendo il codice ASP.NET attraverso la CLR di Mono, per poi ritrasmettere l'output ad Apache attraverso una socket locale.
Per garantire maggiore scalabilità ed isolamento, è possibile configurare il modulo per redirigere percorsi diversi a processi mod_mono_server differenti, in base a regole definite nel file di configurazione di Apache.
Configurazione
Per prima cosa, è necessario installare Mono ed il modulo mod_mono. Ad esempio, in ambiente Ubuntu basterà digitare il comando:
# sudo apt install libapache2-mod-mono
Bisognerà inoltre installare il mod_mono_server compatibile con la versione .NET dell'applicazione da eseguire. Su Ubuntu, consigliamo:
# sudo apt install mono-apache-server4
Quindi abilitiamo il modulo, ad esempio con il comando seguente:
# sudo a2enmod mod_mono
A questo punto è possibile procedere alla configurazione del VirtualHost per l'applicazione ASP.NET. In particolare, bisogna indicare esplicitamente l'utilizzo di Mono per l'esecuzione delle pagine .aspx, con la direttiva SetHandler, ad esempio:
<VirtualHost *:80>
ServerName www.miovirtualhost.com
ServerAlias miovirtualhost.com
DocumentRoot "/var/www/miovirtualhost.com"
ErrorLog "logs/miovirtualhost-error_log"
TransferLog "logs/miovirtualhost-access_log"
<Directory /var/www/miovirtualhost.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
SetHandler mono
DirectoryIndex index.aspx index.html
</Directory>
</VirtualHost>
Maggiori dettagli sulle opzioni di configurazione offerte da mod_mono sono disponibili nella documentazione ufficiale.
Compatibilità
Non tutte le applicazioni ASP.NET possono essere eseguite da Mono ed Apache. Allo stato attuale, ASP.NET 4.0 ed i framework ASP.NET MVC (1,2 e 3) sono supportati integralmente. Alcune caratteristiche del framework 4.5 sono invece parzialmente implementate (MVC 4 e 5) oppure del tutto assenti (ad esempio la Async pipeline di ASP.NET 4.5). Si consiglia pertanto di controllare la documentazione ufficiale e le funzionalità richieste dalla propria applicazione prima di procedere con la configurazione di un ambiente ASP.NET con Mono ed Apache.