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
- Visual Studio 2013
- Webové rozhraní API 2
- Azure SDK pro .NET 2.3
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.
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.
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.
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.
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.
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
.
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 WorkerRole
IDisposable:
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ů.
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:
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.
Pokud nejste přihlášení ke svému účtu Azure, klikněte na Přihlásit se.
Po přihlášení zvolte předplatné a klikněte na Další.
Zadejte název cloudové služby a zvolte oblast. Klikněte na Vytvořit.
Klikněte na Publikovat.
Konfigurace vlastního názvu domény pro cloudovou službu Azure (Classic)