Programming Languages Hacks

Importanti regole per linguaggi di programmazione rilevanti come Java, C, C++, C#…

  • Subscribe

  • Lettori

    I miei lettori abituali

  • Twitter

OWIN e KATANA

Posted by Ricibald on March 14th, 2015

ASP.NET e OWIN

Nel tempo il framework ASP.NET si è trasformato. Inizialmente viveva unicamente nel contesto System.Web e le evoluzioni seguivano tempistiche di evoluzione dello stesso System.Web (annuali). In seguito l’approccio è evoluto verso componenti indipendenti da System.Web come le ASP.NET MVC e ASP.NET Web API le cui evoluzioni viaggiano indipendentemente grazie a NuGET iterando rapidamente e rimanendo "al passo".

Essendo indipendenti da System.Web sono quindi indipendenti anche da IIS: è infatti possibile fornire l’hosting di ASP.NET Web API all’interno di una semplice console o servizio windows.

La possibilità di avere un "host custom" leggero grazie ad ASP.NET Web API è stato voluto anche da numerosi altri framework, ognuno con le proprie esigenze di start/stop etc. Questo consente di non avere un IIS monolitico con tutte le funzionalità, ma avere un web server con i vari componenti indipendenti su NuGET che possono iterare indipendentemente. Avremo quindi update indipendenti per: static file serving, dynamic page generation, Web API, real-time/push notifications.

OWIN definisce un’interfaccia standard che consente di disaccoppiare il server dalle applicazioni (non sono legato fortemente a IIS o System.Web) consentendo lo sviluppo di moduli indipendenti e il deploy di applicazioni in differenti host, piattaforme e sistemi operativi. Diventa di fatto un framework generico per far interagire i framework web con i server attraverso una pipeline OWIN nota come middleware.

Tale standard, caratterizzato prevalentemente dallo scambio di strutture dati e delegati, deve poi essere implementato da un Web Server compatibile con lo standard OWIN.

Katana

L’implementazione Microsoft di tale standard open è Katana: la versione "portable" e leggera dei componenti ASP.NET. Include framework, server e host, è modulare (il size cresce solo a seconda dei moduli effettivamente utilizzati) e quindi più performante e scalabile. Porta in sostanza gli stessi benefici di Node.js mantenendosi in un contesto ASP.NET.

Nella pratica, implementeremo le nostre pipeline OWIN basandoci sul namespace generico Microsoft.Owin (indipendente dall’host) e tramite Katana potremo scegliere l’host:

  • IIS/ASP.NET: tramite package Microsoft.Owin.Host.SystemWeb in cui le pipeline OWIN sono eseguite in IIS come parte della pipeline standard ASP.NET (in pratica Katana diventa in IIS un HttpModule e un HttpHandler). Poiché server+host confluiscono nello stesso componente i due non sono separabili e non è quindi rimpiazzare nel server un’implementazione alternativa.
  • Custom Host: tramite package OwinHost in cui le pipeline OWIN sono eseguite in un nostro processo come una console, un servizio windows o un Azure Worker Role (in pratica Katana usa la classe .NET HttpListener). Nella classe Main dovremmo inserire il codice che avvia il server.
  • OwinHost.exe: come il Custom Host ma in una console indipendente pronta all’uso che avvia il server trovando la pipeline OWIN che abbiamo implementato tramite convenzioni

Si può creare un proprio modulo Katana (es. logging) semplicemente creando una pipeline che deriva da OwinMiddleware e aggiungendolo allo startup (o tramite convenzioni se si usa OwinHost.exe).

I moduli Katana già presenti sono numerosi come si nota da NuGET e vanno da SignalR a OAuth 2.0 allo stesso ASP.NET Web API. Spesso le pipeline (o moduli) creano gerarchie di dipendenze come evidente in questa immagine.

Approfondimenti

Per altre info si consulti l’articolo introduttivo mentre si rimanda al link OWIN ufficiale per la lista dei server (es. Katana), framework (es. ASP.NET o WebAPI) e implementazioni dei framework (es. ASP.NET 5)

Leave a Reply

You must be logged in to post a comment.