Hostování ASP.NET webového rozhraní API 2 v roli pracovního procesu Azure

Mike Wasson

V tomto kurzu se dozvíte, jak hostovat ASP.NET webové rozhraní API v roli pracovního procesu Azure pomocí OWIN k vlastnímu hostování architektury webového rozhraní API.

Open Web Interface for .NET (OWIN) definuje abstrakci mezi webovými servery .NET a webovými aplikacemi. OWIN odděluje webovou aplikaci od serveru. Díky tomu je OWIN ideální pro samoobslužné hostování webové aplikace ve vašem vlastním procesu, mimo službu IIS – například v rámci role pracovního procesu Azure.

V tomto kurzu použijete balíček Microsoft.Owin.Host.HttpListener, který poskytuje server HTTP, který se používá k vlastnímu hostování aplikací OWIN.

Verze softwaru použité v tomto kurzu

Vytvoření projektu Microsoft Azure

Spusťte Visual Studio s oprávněními správce. K místnímu ladění aplikace pomocí emulátoru služby Azure Compute jsou potřeba oprávnění správce.

V nabídce File (Soubor) klikněte na New (Nový) a pak klikněte na Project (Projekt). V části Nainstalované šablony v části Visual C# klikněte na Cloud a pak klikněte na Cloudová služba Windows Azure. Projekt pojmenujte AzureApp a klikněte na OK.

Snímek obrazovky s dialogovým oknem Nový projekt se zvýrazněným postupem v možnostech nabídky pro vytvoření Aplikace Azure projektu

V dialogovém okně Nová cloudová služba Windows Azure poklikejte na Role pracovního procesu. Ponechte výchozí název ("Role pracovního procesu1"). Tento krok přidá do řešení roli pracovního procesu. Klikněte na OK.

Snímek obrazovky s dialogovým oknem Nová cloudová služba Windows Azure s možnostmi nabídky pro vytvoření role pracovního procesu

Vytvořené řešení sady Visual Studio obsahuje dva projekty:

  • AzureApp definuje role a konfiguraci pro aplikaci Azure.
  • WorkerRole1 obsahuje kód role pracovního procesu.

Obecně platí, že aplikace Azure může obsahovat více rolí, i když tento kurz používá jednu roli.

Snímek obrazovky okna Průzkumníka řešení se zvýrazněním nového projektu Aplikace Azure a zobrazením názvu aplikace a možnosti role pracovního procesu pod ním

Přidání webového rozhraní API a balíčků OWIN

V nabídce Nástroje klikněte na Správce balíčků NuGet a pak klikněte na Konzola Správce balíčků.

V okně konzoly Správce balíčků zadejte následující příkaz:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Přidání koncového bodu HTTP

V Průzkumník řešení rozbalte projekt AzureApp. Rozbalte uzel Role, klikněte pravým tlačítkem na WorkerRole1 a vyberte Vlastnosti.

Snímek obrazovky s nabídkou okna Průzkumníka řešení se zvýrazněním kroků pro výběr nastavení vlastností role pracovního procesu

Klikněte na Koncové body a pak klikněte na Přidat koncový bod.

V rozevíracím seznamu Protokol vyberte http. Do pole Veřejný port a privátní port zadejte 80. Tato čísla portů se můžou lišit. Veřejný port je to, co klienti používají při odesílání požadavku na roli.

Snímek obrazovky s možnostmi rozevírací nabídky protokolu, které zobrazují různé konfigurace služby a volby koncového bodu

Konfigurace webového rozhraní API pro Self-Host

V Průzkumník řešení klikněte pravým tlačítkem na projekt WorkerRole1 a vyberte Přidat / třídu a přidejte novou třídu. Pojmenujte třídu Startup.

Snímek obrazovky s oknem průzkumníka řešení s možnostmi nabídky a zvýrazněním cesty k přidání třídy

Nahraďte veškerý často používaný kód v tomto souboru následujícím kódem:

using Owin;
using System.Web.Http;

namespace WorkerRole1
{
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                "Default",
                "{controller}/{id}",
                new { id = RouteParameter.Optional });

            app.UseWebApi(config);
        }
    }
}

Přidání kontroleru webového rozhraní API

Dále přidejte třídu kontroleru webového rozhraní API. Klikněte pravým tlačítkem na projekt WorkerRole1 a vyberte Přidat / třídu. Pojmenujte třídu TestController. Nahraďte veškerý často používaný kód v tomto souboru následujícím kódem:

using System;
using System.Net.Http;
using System.Web.Http;

namespace WorkerRole1
{
    public class TestController : ApiController
    {
        public HttpResponseMessage Get()
        {
            return new HttpResponseMessage()
            {
                Content = new StringContent("Hello from OWIN!")
            };
        }

        public HttpResponseMessage Get(int id)
        {
            string msg = String.Format("Hello from OWIN (id = {0})", id);
            return new HttpResponseMessage()
            {
                Content = new StringContent(msg)
            };
        }
    }
}

Pro zjednodušení tento kontroler pouze definuje dvě metody GET, které vrací prostý text.

Spuštění hostitele OWIN

Otevřete soubor WorkerRole.cs. Tato třída definuje kód, který se spustí při spuštění a zastavení role pracovního procesu.

Přidejte následující příkaz using:

using Microsoft.Owin.Hosting;

Přidejte do třídy členA WorkerRoleIDisposable:

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

    // ....
}

OnStart V metodě přidejte následující kód pro spuštění hostitele:

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

Metoda WebApp.Start spustí hostitele OWIN. Název Startup třídy je parametr typu metody. Podle konvence bude hostitel volat metodu Configure této třídy.

OnStop Přepište pro odstranění instance _app:

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

Tady je úplný kód pro 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("WebApiRole 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();
        }
    }
}

Sestavte řešení a stisknutím klávesy F5 spusťte aplikaci místně v emulátoru služby Azure Compute. V závislosti na nastavení brány firewall možná budete muset povolit emulátor přes bránu firewall.

Poznámka

Pokud se zobrazí výjimka podobná následující, najdete alternativní řešení v tomto blogovém příspěvku . Nelze načíst soubor nebo sestavení Microsoft.Owin, verze=2.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 nebo jednu z jeho závislostí. Definice manifestu umístěného sestavení neodpovídá odkazu na sestavení. (Výjimka z HRESULT: 0x80131040)"

Emulátor výpočetních prostředků přiřadí koncovému bodu místní IP adresu. IP adresu najdete v uživatelském rozhraní emulátoru výpočetních prostředků. Klikněte pravým tlačítkem na ikonu emulátoru v oznamovací oblasti hlavního panelu a vyberte Zobrazit uživatelské rozhraní emulátoru výpočetních prostředků.

Snímek obrazovky s uživatelským rozhraním Emulátoru služby Azure Compute, který zobrazuje nabídku a informace o adrese koncového bodu I P při výběru možnosti Podrobnosti o službě

Vyhledejte IP adresu v části Nasazení služeb, nasazení [ID], Podrobnosti služby. Otevřete webový prohlížeč a přejděte na http:// address/test/1, kde adresa je IP adresa přiřazená emulátorem výpočetních prostředků. Například http://127.0.0.1:80/test/1. Měla by se zobrazit odpověď z kontroleru webového rozhraní API:

Snímek obrazovky s oknem prohlížeče zobrazující odpověď kontroleru webového počítače po zadání I P adresy přiřazené emulátorem výpočetního prostředí

Nasazení do Azure

Pro tento krok musíte mít účet Azure. Pokud ho ještě nemáte, můžete si za pár minut vytvořit bezplatný zkušební účet. Podrobnosti najdete v tématu Bezplatná zkušební verze Microsoft Azure.

V Průzkumník řešení klikněte pravým tlačítkem na projekt AzureApp. Vyberte Publikovat.

Snímek obrazovky s možnostmi nabídky okna průzkumníka řešení, který zvýrazňuje postup nasazení nebo publikování projektu.

Pokud nejste přihlášení ke svému účtu Azure, klikněte na Přihlásit se.

Snímek obrazovky s dialogovým oknem publikovat aplikaci Azure, které vyžaduje možnost přihlášení předtím, než budou k dispozici další možnosti

Po přihlášení zvolte předplatné a klikněte na Další.

Snímek obrazovky s publikováním aplikace Azure po přihlášení a výzvou uživatele k výběru typu předplatného před pokračováním k dalšímu kroku

Zadejte název cloudové služby a zvolte oblast. Klikněte na Vytvořit.

Snímek obrazovky s dialogovým oknem Vytvořit cloudovou službu a účet úložiště s žádostí uživatele, aby zadal název a oblast služby své aplikace

Klikněte na Publikovat.

Snímek obrazovky s oknem publikovat aplikaci Azure s potvrzením všech vybraných nastavení a s možnostmi tlačítka pro návrat nebo publikování

Konfigurace vlastního názvu domény pro cloudovou službu Azure (Classic)

Další materiály