Condividi tramite


Introduzione a OWIN e Katana

Open Web Interface for .NET (OWIN) definisce un'astrazione tra i server Web .NET e le applicazioni Web. Separando il server Web dall'applicazione, OWIN semplifica la creazione di middleware per lo sviluppo Web .NET. Inoltre, OWIN semplifica la conversione di applicazioni Web in altri host, ad esempio l'hosting self-hosting in un servizio Windows o in un altro processo.

OWIN è una specifica di proprietà della community, non un'implementazione. Il progetto Katana è un set di componenti OWIN open source sviluppati da Microsoft. Per una panoramica generale di OWIN e Katana, vedere Panoramica di Project Katana. In questo articolo si passerà direttamente al codice per iniziare.

Questa esercitazione usa Visual Studio 2013 Release Candidate, ma è anche possibile usare Visual Studio 2012. Alcuni passaggi sono diversi in Visual Studio 2012, come si noti di seguito.

Ospitare OWIN in IIS

In questa sezione verrà ospitato OWIN in IIS. Questa opzione offre la flessibilità e la componibilità di una pipeline OWIN insieme al set di funzionalità maturo di IIS. Usando questa opzione, l'applicazione OWIN viene eseguita nella pipeline di richiesta ASP.NET.

Creare prima di tutto un nuovo progetto di applicazione Web ASP.NET. In Visual Studio 2012 usare il ASP.NET tipo di progetto Applicazione Web vuota.

Nuova illustrazione del progetto di ASP.NET

Nella finestra di dialogo Nuovo progetto ASP.NET selezionare il modello Vuoto .

Illustrazione di esempio

Aggiungere pacchetti NuGet

Aggiungere quindi i pacchetti NuGet necessari. Dal menu Strumenti selezionare Gestione pacchetti NuGet e quindi console di Gestione pacchetti. Nella finestra Console di Gestione pacchetti digitare il comando seguente:

install-package Microsoft.Owin.Host.SystemWeb –Pre

Installazione di Gestione pacchetti, illustrazione di esempio

Aggiungere una classe di avvio

Aggiungere quindi una classe di avvio OWIN. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi, quindi selezionare Nuovo elemento. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Classe di avvio Owin. Per altre info sulla configurazione della classe di avvio, vedi Rilevamento classi di avvio OWIN.

Aggiunta di un esempio di classe di avvio

Aggiungere al metodo Startup1.Configuration il codice seguente:

public void Configuration(IAppBuilder app)
{
    // New code:
    app.Run(context =>
    {
        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

Questo codice aggiunge una semplice parte di middleware alla pipeline OWIN, implementata come funzione che riceve un'istanza di Microsoft.Owin.IOwinContext . Quando il server riceve una richiesta HTTP, la pipeline OWIN richiama il middleware. Il middleware imposta il tipo di contenuto per la risposta e scrive il corpo della risposta.

Nota

Il modello di classe OWIN Startup è disponibile in Visual Studio 2013. Se si usa Visual Studio 2012, è sufficiente aggiungere una nuova classe vuota denominata Startup1e incollare il codice seguente:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(OwinApp.Startup1))]

namespace OwinApp
{
    public class Startup1
    {
        public void Configuration(IAppBuilder app)
        {
          app.Run(context =>
          {
              context.Response.ContentType = "text/plain";
              return context.Response.WriteAsync("Hello, world.");
          });
        }
    }
}

Eseguire l'applicazione

Premere F5 per avviare il debug. Visual Studio aprirà una finestra del browser su http://localhost:*port*/. La pagina avrà un aspetto simile al seguente:

Illustrazione del caricamento della pagina completata

Self-Host OWIN in un'applicazione console

È facile convertire questa applicazione dall'hosting IIS all'hosting self-hosting in un processo personalizzato. Con l'hosting IIS, IIS funge sia da server HTTP che come processo che ospita il servizio. Con l'self-hosting, l'applicazione crea il processo e usa la classe HttpListener come server HTTP.

In Visual Studio creare una nuova applicazione console. Nella finestra Console di Gestione pacchetti digitare il comando seguente:

Install-Package Microsoft.Owin.SelfHost -Pre

Aggiungere una Startup1 classe dalla parte 1 di questa esercitazione al progetto. Non è necessario modificare questa classe.

Implementare il metodo dell'applicazione come indicato di Main seguito.

class Program
{
    static void Main(string[] args)
    {
        using (Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000"))
        {
            Console.WriteLine("Press [enter] to quit...");
            Console.ReadLine();
        }
    }
}

Quando si esegue l'applicazione console, il server inizia ad ascoltare http://localhost:9000. Se si passa a questo indirizzo in un Web browser, verrà visualizzata la pagina "Hello world".

Esempio di immagine di ascolto della console

Aggiungere diagnostica OWIN

Il pacchetto Microsoft.Owin.Diagnostics contiene middleware che rileva le eccezioni non gestite e visualizza una pagina HTML con i dettagli dell'errore. Questa pagina funziona in modo molto simile alla pagina di errore ASP.NET, talvolta denominata "schermo giallo della morte" (YSOD). Analogamente a YSOD, la pagina di errore Katana è utile durante lo sviluppo, ma è consigliabile disabilitarla in modalità di produzione.

Per installare il pacchetto Di diagnostica nel progetto, digitare il comando seguente nella finestra Console di Gestione pacchetti:

install-package Microsoft.Owin.Diagnostics –Pre

Modificare il codice nel Startup1.Configuration metodo come indicato di seguito:

public void Configuration(IAppBuilder app)
{
    // New code: Add the error page middleware to the pipeline. 
    app.UseErrorPage();

    app.Run(context =>
    {
        // New code: Throw an exception for this URI path.
        if (context.Request.Path.Equals(new PathString("/fail")))
        {
            throw new Exception("Random exception");
        }

        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

A questo punto usare CTRL+F5 per eseguire l'applicazione senza eseguire il debug, in modo che Visual Studio non si interrompa sull'eccezione. L'applicazione si comporta come in precedenza, fino a quando non si passa a http://localhost/fail, a quel punto l'applicazione genera l'eccezione. Il middleware della pagina di errore intercetta l'eccezione e visualizza una pagina HTML con informazioni sull'errore. È possibile fare clic sulle schede per visualizzare lo stack, la stringa di query, i cookie, l'intestazione della richiesta e le variabili di ambiente OWIN.

Esempio di immagine di exeption casuale

Passaggi successivi