Freigeben über


Erste Schritte mit OWIN und Katana

Open Web Interface for .NET (OWIN) definiert eine Abstraktion zwischen .NET-Webservern und Webanwendungen. Durch entkoppeln des Webservers von der Anwendung erleichtert OWIN die Erstellung von Middleware für die .NET-Webentwicklung. Darüber hinaus erleichtert OWIN das Portieren von Webanwendungen auf andere Hosts, z. B. das Selbsthosting in einem Windows-Dienst oder einem anderen Prozess.

OWIN ist eine communityeigene Spezifikation, keine Implementierung. Das Katana-Projekt besteht aus einer Reihe von Open-Source-OWIN-Komponenten, die von Microsoft entwickelt wurden. Eine allgemeine Übersicht über OWIN und Katana finden Sie unter Übersicht über Project Katana. In diesem Artikel werde ich direkt in den Code springen, um zu beginnen.

In diesem Tutorial wird Visual Studio 2013 Release Candidate verwendet, Sie können aber auch Visual Studio 2012 verwenden. Einige der Schritte unterscheiden sich in Visual Studio 2012, was ich unten anmerke.

Hosten von OWIN in IIS

In diesem Abschnitt hosten wir OWIN in IIS. Diese Option bietet Ihnen die Flexibilität und Zusammensetzbarkeit einer OWIN-Pipeline zusammen mit dem ausgereiften Featuresatz von IIS. Mit dieser Option wird die OWIN-Anwendung in der ASP.NET-Anforderungspipeline ausgeführt.

Erstellen Sie zunächst ein neues ASP.NET-Webanwendungsprojekt. (Verwenden Sie in Visual Studio 2012 den Projekttyp ASP.NET Leere Webanwendung.)

Abbildung des neuen ASP.NET-Projekts

Wählen Sie im Dialogfeld Neues ASP.NET Projekt die Vorlage Leer aus.

Beispieldarstellung

Hinzufügen von NuGet-Paketen

Fügen Sie als Nächstes die erforderlichen NuGet-Pakete hinzu. Wählen Sie im Menü Extras die Option NuGet-Paket-Manager und dann Paket-Manager-Konsole aus. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

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

Installieren des Paket-Managers, Beispieldarstellung

Hinzufügen einer Startklasse

Fügen Sie als Nächstes eine OWIN-Startklasse hinzu. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen und dann Neues Element aus. Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Owin-Startklasse aus. Weitere Informationen zum Konfigurieren der Startklasse finden Sie unter OWIN-Startklassenerkennung.

Hinzufügen eines Startklassenbeispiels

Fügen Sie der Startup1.Configuration-Methode folgenden Code hinzu:

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

Dieser Code fügt der OWIN-Pipeline eine einfache Middleware hinzu, die als Funktion implementiert wird, die eine Microsoft.Owin.IOwinContext-instance empfängt. Wenn der Server eine HTTP-Anforderung empfängt, ruft die OWIN-Pipeline die Middleware auf. Die Middleware legt den Inhaltstyp für die Antwort fest und schreibt den Antworttext.

Hinweis

Die OWIN-Startklassenvorlage ist in Visual Studio 2013 verfügbar. Wenn Sie Visual Studio 2012 verwenden, fügen Sie einfach eine neue leere Klasse mit dem Namen hinzu Startup1, und fügen Sie den folgenden Code ein:

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.");
          });
        }
    }
}

Ausführen der Anwendung

Drücken Sie F5, um mit das Debuggen zu starten. Visual Studio öffnet ein Browserfenster für http://localhost:*port*/. Die Seite sollte wie folgt aussehen:

Abbildung zum erfolgreichen Laden der Seite

Self-Host von OWIN in einer Konsolenanwendung

Es ist einfach, diese Anwendung in einem benutzerdefinierten Prozess vom IIS-Hosting in das Selbsthosting zu konvertieren. Beim IIS-Hosting fungiert IIS sowohl als HTTP-Server als auch als Der Prozess, der den Dienst hostet. Beim Selfhosting erstellt Ihre Anwendung den Prozess und verwendet die HttpListener-Klasse als HTTP-Server.

Erstellen Sie in Visual Studio eine neue Konsolenanwendung. Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

Install-Package Microsoft.Owin.SelfHost -Pre

Fügen Sie dem Projekt eine Startup1 Klasse aus Teil 1 dieses Tutorials hinzu. Sie müssen diese Klasse nicht ändern.

Implementieren Sie die -Methode der Main Anwendung wie folgt.

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();
        }
    }
}

Wenn Sie die Konsolenanwendung ausführen, beginnt der Server mit dem Lauschen von http://localhost:9000. Wenn Sie in einem Webbrowser zu dieser Adresse navigieren, wird die Seite "Hallo Welt" angezeigt.

Beispiel für ein Konsolenabhörbild

Hinzufügen der OWIN-Diagnose

Das Microsoft.Owin.Diagnostics-Paket enthält Middleware, die nicht behandelte Ausnahmen abfängt und eine HTML-Seite mit Fehlerdetails anzeigt. Diese Seite funktioniert ähnlich wie die ASP.NET Fehlerseite, die manchmal als "gelber Bildschirm des Todes" (YSOD) bezeichnet wird. Wie das YSOD ist die Katana-Fehlerseite während der Entwicklung nützlich, aber es ist eine bewährte Methode, sie im Produktionsmodus zu deaktivieren.

Um das Diagnosepaket in Ihrem Projekt zu installieren, geben Sie den folgenden Befehl im Fenster Paket-Manager-Konsole ein:

install-package Microsoft.Owin.Diagnostics –Pre

Ändern Sie den Code in Ihrer Startup1.Configuration -Methode wie folgt:

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.");
    });
}

Verwenden Sie nun STRG+F5, um die Anwendung ohne Debuggen auszuführen, damit Visual Studio bei der Ausnahme nicht unterbrochen wird. Die Anwendung verhält sich wie zuvor, bis Sie zu http://localhost/failnavigieren. An diesem Punkt löst die Anwendung die Ausnahme aus. Die Fehlerseitenmiddleware fängt die Ausnahme ab und zeigt eine HTML-Seite mit Informationen zum Fehler an. Sie können auf die Registerkarten klicken, um den Stapel, die Abfragezeichenfolge, Cookies, den Anforderungsheader und die OWIN-Umgebungsvariablen anzuzeigen.

Beispiel für zufällige Exeption

Nächste Schritte