Aracılığıyla paylaş


ASP.NET Web API 2'yi azure çalışan rolünde barındırma

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

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.

Azure Uygulaması projesi oluşturmak için menü seçeneklerindeki adımları vurgulayan 'yeni proje' iletişim kutusunun ekran görüntüsü.

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.

Çalışan rolü oluşturmak için menü seçeneklerini gösteren 'Yeni Windows Azure Bulut Hizmeti' iletişim kutusunun ekran görüntüsü.

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.

Yeni Azure Uygulaması projesini vurgulayan ve altındaki uygulama adı ve çalışan rolü seçeneğini gösteren çözüm gezgini penceresinin ekran görüntüsü.

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.

Çalışan rolünün özellik ayarlarını seçme adımlarını vurgulayan çözüm gezgini pencere menüsünün ekran görüntüsü.

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.

Farklı hizmet yapılandırmalarını ve uç nokta seçeneklerini gösteren protokol açılan menü seçeneklerinin ekran görüntüsü.

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ı Startupadlandırın.

Menü seçeneklerini gösteren ve sınıf ekleme yolunu vurgulayan çözüm gezgini penceresinin ekran görüntüsü.

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 WorkerRolebir 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 ayrıntıları' seçeneği seçilirken menüyü ve I P uç noktası adres bilgilerini gösteren Azure İşlem Öykünücüsü U I'nin ekran görüntüsü.

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:

İşlem öykünücüsü tarafından atanan I P adresini girdikten sonra Web A P I denetleyicisi yanıtını gösteren tarayıcı penceresinin ekran görüntüsü.

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.

Projeyi dağıtmak veya yayımlamak için izleyebileceğiniz adımları vurgulayan çözüm gezgini penceresinin menü seçeneklerinin ekran görüntüsü.

Azure hesabınızda oturum açmadıysanız Oturum Aç'a tıklayın.

Diğer seçenekler kullanılabilir duruma gelmeden önce oturum açma seçeneği isteyen 'Azure uygulamasını yayımla' iletişim kutusunun ekran görüntüsü.

Oturum açtıktan sonra bir abonelik seçin ve İleri'ye tıklayın.

Oturum açtıktan sonra bir sonraki adıma geçmeden önce kullanıcıdan bir abonelik türü seçmesini isteyen 'Azure uygulamasını yayımlama' işleminin ekran görüntüsü.

Bulut hizmeti için bir ad girin ve bir bölge seçin. Oluştur’a tıklayın.

Kullanıcıdan uygulama hizmeti için bir ad ve bölge girmesini isteyen 'bulut hizmeti ve depolama hesabı oluştur' iletişim kutusunun ekran görüntüsü.

Yayımla’ya tıklayın.

'Azure uygulamasını yayımla' penceresinin ekran görüntüsü, yapılan tüm ayar seçimlerini onaylama ve geri dönmek veya yayımlamak için düğme seçenekleri sağlama.

Azure bulut hizmeti için özel etki alanı adı yapılandırma (klasik)

Ek Kaynaklar