Freigeben über


Hosten von OWIN in einer Azure-Workerrolle

In diesem Tutorial erfahren Sie, wie Sie OWIN in einer Microsoft Azure-Workerrolle selbst hosten.

Open Web Interface for .NET (OWIN) definiert eine Abstraktion zwischen .NET-Webservern und Webanwendungen. OWIN entkoppelt die Webanwendung vom Server. Dadurch eignet sich OWIN ideal für das Selbsthosting einer Webanwendung in Ihrem eigenen Prozess, außerhalb von IIS, z. B. innerhalb einer Azure-Workerrolle.

In diesem Tutorial erfahren Sie, wie Sie eine OWIN-Anwendung in einer Microsoft Azure-Workerrolle selbst hosten. Weitere Informationen zu Workerrollen finden Sie unter Azure-Ausführungsmodelle.

Im Tutorial verwendete Softwareversionen

Erstellen eines Microsoft Azure-Projekts

Starten Sie Visual Studio mit Administratorrechten. Administratorrechte sind erforderlich, um die Anwendung mithilfe des Azure-Computeemulators lokal zu debuggen.

Klicken Sie im Menü Datei auf Neu und dann auf Projekt. Klicken Sie unter Installierte Vorlagen unter Visual C# auf Cloud und dann auf Windows Azure Cloud Service. Nennen Sie das Projekt "AzureApp", und klicken Sie auf OK.

Beispieldateistrukturbild

Doppelklicken Sie im Dialogfeld Neuer Windows Azure-Clouddienst auf Workerrolle. Behalten Sie den Standardnamen ("WorkerRole1") bei. In diesem Schritt wird der Lösung eine Workerrolle hinzugefügt. Klicken Sie auf OK.

Dialogfeld

Die erstellte Visual Studio-Projektmappe enthält zwei Projekte:

  • "AzureApp" definiert die Rollen und die Konfiguration für die Azure-Anwendung.
  • "WorkerRole1" enthält den Code für die Workerrolle.

Im Allgemeinen kann eine Azure-Anwendung mehrere Rollen enthalten, obwohl in diesem Tutorial eine einzelne Rolle verwendet wird.

Projektmappen-Explorer, Dialogfeld

Hinzufügen der OWIN-Self-Host-Pakete

Klicken Sie im Menü Extras auf NuGet-Paket-Manager und dann auf Paket-Manager-Konsole.

Geben Sie im Fenster Paket-Manager-Konsole den folgenden Befehl ein:

Install-Package Microsoft.Owin.SelfHost

Hinzufügen eines HTTP-Endpunkts

Erweitern Sie in Projektmappen-Explorer das Projekt AzureApp. Erweitern Sie den Knoten Rollen, klicken Sie mit der rechten Maustaste auf WorkerRole1, und wählen Sie Eigenschaften aus.

Abbildung zum Hinzufügen eines HTTP-Endpunkts

Klicken Sie auf Endpunkte und dann auf Endpunkt hinzufügen.

Wählen Sie in der Dropdownliste Protokoll die Option "http" aus. Geben Sie unter Öffentlicher Port und privater Port den Wert 80 ein. Diese Portnummern dürfen sich unterscheiden. Der öffentliche Port wird von Clients verwendet, wenn sie eine Anforderung an die Rolle senden.

Beispielbild für die Protokollauswahl

Erstellen der OWIN-Startklasse

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt WorkerRole1, und wählen SieKlassehinzufügen / aus, um eine neue Klasse hinzuzufügen. Geben Sie der Klassen den Namen Startup.

Ersetzen Sie den gesamten Code des Bausteines durch Folgendes:

using Owin;

namespace WorkerRole1
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseWelcomePage("/");
        }
    }
}

Die UseWelcomePage Erweiterungsmethode fügt Ihrer Anwendung eine einfache HTML-Seite hinzu, um zu überprüfen, ob die Website funktioniert.

Starten des OWIN-Hosts

Öffnen Sie die Datei WorkerRole.cs. Diese Klasse definiert den Code, der ausgeführt wird, wenn die Workerrolle gestartet und beendet wird.

Fügen Sie die folgende using-Anweisung hinzu:

using Microsoft.Owin.Hosting;

Fügen Sie der WorkerRole -Klasse ein IDisposable-Element hinzu:

public class WorkerRole : RoleEntryPoint
{
    private IDisposable _app = null;

    // ....
}

Fügen Sie in der OnStart -Methode den folgenden Code hinzu, um den Host zu starten:

public override bool OnStart()
{
    ServicePointManager.DefaultConnectionLimit = 12;

    // New code:
    var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"];
    string baseUri = String.Format("{0}://{1}", 
        endpoint.Protocol, endpoint.IPEndpoint);

    Trace.TraceInformation(String.Format("Starting OWIN at {0}", baseUri), 
        "Information");

    _app = WebApp.Start<Startup>(new StartOptions(url: baseUri));
    return base.OnStart();
}

Die WebApp.Start-Methode startet den OWIN-Host. Der Name der Startup -Klasse ist ein Typparameter für die -Methode. Gemäß Konvention ruft der Host die Configure -Methode dieser Klasse auf.

Überschreiben Sie, um die OnStop_app instance zu verwerfen:

public override void OnStop()
{
    if (_app != null)
    {
        _app.Dispose();
    }
    base.OnStop();
}

Hier sehen Sie den vollständigen Code für WorkerRole.cs:

using Microsoft.Owin.Hosting;
using Microsoft.WindowsAzure.ServiceRuntime;
using System;
using System.Diagnostics;
using System.Net;
using System.Threading;

namespace WorkerRole1
{
    public class WorkerRole : RoleEntryPoint
    {
        private IDisposable _app = null;

        public override void Run()
        {
            Trace.TraceInformation("WorkerRole entry point called", "Information");

            while (true)
            {
                Thread.Sleep(10000);
                Trace.TraceInformation("Working", "Information");
            }
        }

        public override bool OnStart()
        {
            ServicePointManager.DefaultConnectionLimit = 12;

            var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"];
            string baseUri = String.Format("{0}://{1}", 
                endpoint.Protocol, endpoint.IPEndpoint);

            Trace.TraceInformation(String.Format("Starting OWIN at {0}", baseUri), 
                "Information");

            _app = WebApp.Start<Startup>(new StartOptions(url: baseUri));
           return base.OnStart();
        }

        public override void OnStop()
        {
            if (_app != null)
            {
                _app.Dispose();
            }
            base.OnStop();
        }
    }
}

Erstellen Sie die Lösung, und drücken Sie F5, um die Anwendung lokal im Azure-Computeemulator auszuführen. Abhängig von Ihren Firewalleinstellungen müssen Sie möglicherweise den Emulator über Ihre Firewall zulassen.

Der Computeemulator weist dem Endpunkt eine lokale IP-Adresse zu. Sie können die IP-Adresse finden, indem Sie die Benutzeroberfläche des Computeemulators anzeigen. Klicken Sie im Infobereich der Taskleiste mit der rechten Maustaste auf das Emulatorsymbol, und wählen Sie Computeemulator-Benutzeroberfläche anzeigen aus.

Abbildung des Computeemulators

Suchen Sie die IP-Adresse unter Dienstbereitstellungen, Bereitstellung [ID], Dienstdetails. Öffnen Sie einen Webbrowser, und navigieren Sie zu http:// Adresse, wobei address die vom Computeemulator zugewiesene IP-Adresse ist. beispiel: http://127.0.0.1:80. Die OWIN-Willkommensseite sollte angezeigt werden:

Abbildung zum Suchen von IP-Adressen

In Azure bereitstellen

Für diesen Schritt benötigen Sie ein Azure-Konto. Wenn Sie noch nicht über ein Konto verfügen, können Sie in wenigen Minuten ein kostenloses Testkonto erstellen. Weitere Informationen finden Sie unter Kostenlose Microsoft Azure-Testversion.

Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt AzureApp. Wählen Sie Veröffentlichen.

Veröffentlichen einer AzureApp-Abbildung

Wenn Sie nicht bei Ihrem Azure-Konto angemeldet sind, klicken Sie auf Anmelden.

Beispielbild für die Anmeldung

Nachdem Sie angemeldet sind, wählen Sie ein Abonnement aus, und klicken Sie auf Weiter.

Beispiel für die Auswahl eines Abonnementimages

Geben Sie einen Namen für den Clouddienst ein, und wählen Sie eine Region aus. Klicken Sie auf Erstellen.

Erstellen eines Clouddiensts, Imagebeispiel

Klicken Sie auf Veröffentlichen.

Veröffentlichen neu erstellter Azure-Anwendung, Bildbeispiel

Im Fenster Azure-Aktivitätsprotokoll wird der Fortschritt der Bereitstellung angezeigt. Wenn die App bereitgestellt wird, navigieren Sie zu http://appname.cloudapp.net/, wobei appname der Name Ihres Clouddiensts ist.

Zusätzliche Ressourcen