Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Mike Wasson
Bu öğreticide, Web API çerçevesini kendi kendine barındırmak için OWIN kullanarak ASP.NET Web API'sinin azure çalışan rolünde nasıl barındırılası gösterilmektedir.
.NET için Açık Web Arabirimi (OWIN), .NET web sunucuları ve web uygulamaları arasında bir soyutlama tanımlar. OWIN, web uygulamasını sunucudan ayrıştırarak OWIN'in bir web uygulamasını IIS dışında, örneğin bir Azure çalışan rolünde kendi işleminizde barındırmak için ideal olmasını sağlar.
Bu öğreticide, OWIN uygulamalarını kendi kendine barındırmak için kullanılan bir HTTP sunucusu sağlayan Microsoft.Owin.Host.HttpListener paketini kullanacaksınız.
Öğreticide kullanılan yazılım sürümleri
- Visual Studio 2013
- Web API 2
- .NET 2.3 için Azure SDK
Microsoft Azure Projesi oluşturma
Visual Studio'yu yönetici ayrıcalıklarıyla başlatın. Azure İşlem Öykünücüsü kullanılarak uygulamada yerel olarak hata ayıklamak için yönetici ayrıcalıkları gerekir.
Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayın. Yüklü Şablonlar'da, Visual C# altında Bulut'a ve ardından Windows Azure Bulut Hizmeti'ne tıklayın. Projeyi "AzureApp" olarak adlandırın ve Tamam'a tıklayın.
Yeni Windows Azure Bulut Hizmeti iletişim kutusunda Çalışan Rolü'ne çift tıklayın. Varsayılan adı ("WorkerRole1") bırakın. Bu adım çözüme bir çalışan rolü ekler. Tamam'a tıklayın.
Oluşturulan Visual Studio çözümü iki proje içerir:
- "AzureApp", Azure uygulamasının rollerini ve yapılandırmasını tanımlar.
- "WorkerRole1", çalışan rolünün kodunu içerir.
Genel olarak, bir Azure uygulaması birden çok rol içerebilir, ancak bu öğreticide tek bir rol kullanılır.
Web API'sini ve OWIN Paketlerini ekleme
Araçlar menüsünde NuGet Paket Yöneticisi'ne ve ardından Paket Yöneticisi Konsolu'na tıklayın.
Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu girin:
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
HTTP Uç Noktası ekleme
Çözüm Gezgini'da AzureApp projesini genişletin. Roller düğümünü genişletin, WorkerRole1 öğesine sağ tıklayın ve Özellikler'i seçin.
Uç Noktalar'a ve ardından Uç Nokta Ekle'ye tıklayın.
Protokol açılan listesinde "http" öğesini seçin. Genel Bağlantı Noktası ve Özel Bağlantı Noktası'na 80 yazın. Bu bağlantı noktası numaraları farklı olabilir. Ortak bağlantı noktası, istemcilerin role istek gönderdiğinde kullandığı bağlantı noktasıdır.
Self-Host için Web API'sini yapılandırma
Çözüm Gezgini'da WorkerRole1 projesine sağ tıklayın ve Yeni bir sınıf eklemek içinSınıfEkle'yi / seçin. sınıfını Startup
adlandırın.
Bu dosyadaki tüm ortak kodu aşağıdakilerle değiştirin:
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);
}
}
}
Web API Denetleyicisi Ekleme
Ardından, bir Web API denetleyicisi sınıfı ekleyin. WorkerRole1 projesine sağ tıklayın veSınıfEkle'yi / seçin. TestController sınıfını adlandırın. Bu dosyadaki tüm ortak kodu aşağıdakilerle değiştirin:
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)
};
}
}
}
Kolaylık olması için, bu denetleyici düz metin döndüren iki GET yöntemini tanımlar.
OWIN Konağı'nı başlatma
WorkerRole.cs dosyasını açın. Bu sınıf, çalışan rolü başlatıldığında ve durdurulduğunda çalışan kodu tanımlar.
Şu deyimi kullanarak aşağıdakileri ekleyin:
using Microsoft.Owin.Hosting;
Sınıfına WorkerRole
bir IDisposable üyesi ekleyin:
public class WorkerRole : RoleEntryPoint
{
private IDisposable _app = null;
// ....
}
yönteminde OnStart
, konağı başlatmak için aşağıdaki kodu ekleyin:
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();
}
WebApp.Start yöntemi OWIN ana bilgisayarını başlatır. sınıfının adı Startup
yöntemine bir tür parametresidir. Kurala göre, konak bu sınıfın Configure
yöntemini çağırır.
OnStop
_app örneğini atmak için geçersiz kılın:
public override void OnStop()
{
if (_app != null)
{
_app.Dispose();
}
base.OnStop();
}
WorkerRole.cs dosyasının tam kodu aşağıdadır:
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();
}
}
}
Çözümü derleyin ve uygulamayı Azure İşlem Öykünücüsü'nde yerel olarak çalıştırmak için F5 tuşuna basın. Güvenlik duvarı ayarlarınıza bağlı olarak, öykünücüye güvenlik duvarınız üzerinden izin vermeniz gerekebilir.
Not
Aşağıdaki gibi bir özel durumla karşılaşırsanız geçici bir çözüm için lütfen bu blog gönderisine bakın. "'Microsoft.Owin, Version=2.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' dosyası veya derlemesi yüklenemedi veya bağımlılıklarından biri. Bulunan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT özel durumu: 0x80131040)"
İşlem öykünücüsü uç noktaya yerel bir IP adresi atar. İşlem Öykünücüsü kullanıcı arabirimini görüntüleyerek IP adresini bulabilirsiniz. Görev çubuğu bildirim alanındaki öykünücü simgesine sağ tıklayın ve İşlem Öykünücüsü Kullanıcı Arabirimini Göster'i seçin.
Hizmet Dağıtımları, dağıtım [id], Hizmet Ayrıntıları altında IP adresini bulun. Bir web tarayıcısı açın ve http:// address/test/1 adresine gidin; burada adres , işlem öykünücüsü tarafından atanan IP adresidir; örneğin, http://127.0.0.1:80/test/1
. Web API denetleyicisinden gelen yanıtı görmeniz gerekir:
Azure’a dağıtın
Bu adım için bir Azure hesabınız olmalıdır. Henüz bir hesabınız yoksa, yalnızca birkaç dakika içinde ücretsiz bir deneme hesabı oluşturabilirsiniz. Ayrıntılar için bkz. Microsoft Azure Ücretsiz Deneme Sürümü.
Çözüm Gezgini'da AzureApp projesine sağ tıklayın. Yayımla’yı seçin.
Azure hesabınızda oturum açmadıysanız Oturum Aç'a tıklayın.
Oturum açtıktan sonra bir abonelik seçin ve İleri'ye tıklayın.
Bulut hizmeti için bir ad girin ve bir bölge seçin. Oluştur’a tıklayın.
Yayımla’ya tıklayın.
Azure bulut hizmeti için özel etki alanı adı yapılandırma (klasik)