Bagikan melalui


Host ASP.NET Web API 2 dalam Peran Pekerja Azure

oleh Mike Wasson

Tutorial ini menunjukkan cara menghosting ASP.NET Web API dalam Peran Pekerja Azure, menggunakan OWIN untuk menghost sendiri kerangka kerja API Web.

Open Web Interface for .NET (OWIN) mendefinisikan abstraksi antara server web .NET dan aplikasi web. OWIN memisahkan aplikasi web dari server, yang membuat OWIN ideal untuk menghosting sendiri aplikasi web dalam proses Anda sendiri, di luar IIS–misalnya, di dalam peran pekerja Azure.

Dalam tutorial ini, Anda akan menggunakan paket Microsoft.Owin.Host.HttpListener, yang menyediakan server HTTP yang digunakan untuk menghost sendiri aplikasi OWIN.

Versi perangkat lunak yang digunakan dalam tutorial

Membuat Proyek Microsoft Azure

Mulai Visual Studio dengan hak istimewa administrator. Hak istimewa administrator diperlukan untuk men-debug aplikasi secara lokal, menggunakan Azure Compute Emulator.

Pada menu File , klik Baru, lalu klik Proyek. Dari Templat terinstal, di bawah Visual C#, klik Cloud lalu klik Windows Azure Cloud Service. Beri nama proyek "AzureApp" dan klik OK.

Cuplikan layar kotak dialog 'proyek baru', menyoroti langkah-langkah dalam opsi menu untuk membuat proyek Aplikasi Azure.

Dalam dialog Windows Azure Cloud Service Baru , klik dua kali Peran Pekerja. Biarkan nama default ("WorkerRole1"). Langkah ini menambahkan peran pekerja ke solusi. Klik OK.

Cuplikan layar kotak dialog 'Layanan Cloud Windows Azure Baru', memperlihatkan opsi menu untuk membuat peran pekerja.

Solusi Visual Studio yang dibuat berisi dua proyek:

  • "AzureApp" mendefinisikan peran dan konfigurasi untuk aplikasi Azure.
  • "WorkerRole1" berisi kode untuk peran pekerja.

Secara umum, aplikasi Azure dapat berisi beberapa peran, meskipun tutorial ini menggunakan satu peran.

Cuplikan layar jendela penjelajah solusi, menyoroti proyek Aplikasi Azure baru dan memperlihatkan nama aplikasi dan opsi peran pekerja di bawahnya.

Menambahkan Web API dan Paket OWIN

Dari menu Alat , klik Pengelola Paket NuGet, lalu klik Konsol Pengelola Paket.

Di jendela Konsol Manajer Paket, masukkan perintah berikut:

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

Menambahkan Titik Akhir HTTP

Di Penjelajah Solusi, perluas proyek AzureApp. Perluas simpul Peran, klik kanan WorkerRole1, dan pilih Properti.

Cuplikan layar menu jendela penjelajah solusi, menyoroti langkah-langkah untuk memilih pengaturan properti peran pekerja.

Klik Titik Akhir, lalu klik Tambahkan Titik Akhir.

Di daftar dropdown Protokol , pilih "http". Di Port Publik dan Port Privat, ketik 80. Nomor port ini bisa berbeda. Port publik adalah apa yang digunakan klien ketika mereka mengirim permintaan ke peran tersebut.

Cuplikan layar opsi menu dropdown protokol yang memperlihatkan berbagai konfigurasi layanan dan pilihan titik akhir.

Mengonfigurasi API Web untuk Self-Host

Di Penjelajah Solusi, klik kanan proyek WorkerRole1 dan pilih Tambahkan / Kelas untuk menambahkan kelas baru. Beri nama kelas Startup.

Cuplikan layar jendela penjelajah solusi, memperlihatkan opsi menu dan menyoroti jalur untuk menambahkan kelas.

Ganti semua kode boilerplate dalam file ini dengan yang berikut:

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

Menambahkan Pengontrol API Web

Selanjutnya, tambahkan kelas pengontrol API Web. Klik kanan proyek WorkerRole1 dan pilih Tambahkan / Kelas. Beri nama kelas TestController. Ganti semua kode boilerplate dalam file ini dengan yang berikut:

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

Untuk kesederhanaan, pengontrol ini hanya mendefinisikan dua metode GET yang mengembalikan teks biasa.

Memulai Host OWIN

Buka file WorkerRole.cs. Kelas ini mendefinisikan kode yang berjalan ketika peran pekerja dimulai dan dihentikan.

Tambahkan pernyataan penggunaan berikut:

using Microsoft.Owin.Hosting;

Tambahkan anggota IDisposable ke WorkerRole kelas :

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

    // ....
}

OnStart Dalam metode , tambahkan kode berikut untuk memulai host:

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

Metode WebApp.Start memulai host OWIN. Nama Startup kelas adalah parameter jenis untuk metode . Berdasarkan konvensi, host akan memanggil Configure metode kelas ini.

Ambil alih OnStop untuk membuang instans _app :

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

Berikut adalah kode lengkap untuk 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();
        }
    }
}

Buat solusi, dan tekan F5 untuk menjalankan aplikasi secara lokal di Azure Compute Emulator. Bergantung pada pengaturan firewall, Anda mungkin perlu mengizinkan emulator melalui firewall Anda.

Catatan

Jika Anda mendapatkan pengecualian seperti berikut ini, silakan lihat posting blog ini untuk solusinya. "Tidak dapat memuat file atau rakitan 'Microsoft.Owin, Version=2.0.2.0, Culture=netral, PublicKeyToken=31bf3856ad364e35' atau salah satu dependensinya. Definisi manifes assembly yang terletak tidak cocok dengan referensi assembly. (Pengecualian dari HRESULT: 0x80131040)"

Emulator komputasi menetapkan alamat IP lokal ke titik akhir. Anda dapat menemukan alamat IP dengan melihat UI Compute Emulator. Klik kanan ikon emulator di area pemberitahuan bilah tugas, dan pilih Tampilkan UI Emulator Komputasi.

Cuplikan layar Azure Compute Emulator U I, memperlihatkan menu dan informasi alamat titik akhir I P, saat memilih opsi 'detail layanan'.

Temukan alamat IP di bawah Penyebaran Layanan, penyebaran [id], Detail Layanan. Buka browser web dan navigasi ke http:// address/test/1, di mana alamat adalah alamat IP yang ditetapkan oleh emulator komputasi; misalnya, http://127.0.0.1:80/test/1. Anda akan melihat respons dari pengontrol API Web:

Cuplikan layar jendela browser memperlihatkan respons pengontrol Web A P I setelah memasukkan alamat I P yang ditetapkan oleh emulator komputasi.

Sebarkan ke Azure

Untuk langkah ini, Anda harus memiliki akun Azure. Jika Anda belum memilikinya, Anda dapat membuat akun uji coba gratis hanya dalam beberapa menit. Untuk detailnya, lihat Uji Coba Gratis Microsoft Azure.

Di Penjelajah Solusi, klik kanan proyek AzureApp. Pilih Terbitkan.

Cuplikan layar opsi menu jendela penjelajah solusi, yang menyoroti langkah-langkah yang harus diikuti untuk menyebarkan atau menerbitkan proyek.

Jika Anda tidak masuk ke akun Azure Anda, klik Masuk.

Cuplikan layar kotak dialog 'terbitkan aplikasi Azure', yang meminta opsi masuk sebelum opsi lain tersedia.

Setelah Anda masuk, pilih langganan dan klik Berikutnya.

Cuplikan layar 'terbitkan aplikasi Azure' setelah masuk, meminta pengguna untuk memilih jenis langganan sebelum melanjutkan ke langkah berikutnya.

Masukkan nama untuk layanan awan dan pilih wilayah. Klik Buat.

Cuplikan layar kotak dialog 'buat layanan awan dan akun penyimpanan', meminta pengguna untuk memasukkan nama dan wilayah untuk layanan aplikasi mereka.

Klik Terbitkan.

Cuplikan layar jendela 'terbitkan aplikasi Azure', mengonfirmasi semua pilihan pengaturan yang dibuat, dan menyediakan opsi tombol untuk kembali atau menerbitkan.

Mengonfigurasi nama domain kustom untuk Azure Cloud Service (klasik)

Sumber Daya Tambahan