OWIN ve Katana ile Çalışmaya Başlama

.NET için Açık Web Arabirimi (OWIN), .NET web sunucuları ve web uygulamaları arasında bir soyutlama tanımlar. Web sunucusunu uygulamadan ayıran OWIN, .NET web geliştirmesi için ara yazılım oluşturmayı kolaylaştırır. Ayrıca, OWIN web uygulamalarını diğer konaklara taşımayı kolaylaştırır; örneğin, bir Windows hizmetinde veya başka bir işlemde kendi kendine barındırma.

OWIN bir uygulama değil, topluluğa ait bir belirtimdir. Katana projesi, Microsoft tarafından geliştirilen bir açık kaynak OWIN bileşenleri kümesidir. OWIN ve Katana'ya genel bir genel bakış için bkz. Project Katana'ya Genel Bakış. Bu makalede, başlamak için doğrudan koda atlayacağım.

Bu öğreticide Visual Studio 2013 Sürüm Adayı kullanılır, ancak Visual Studio 2012'yi de kullanabilirsiniz. Visual Studio 2012'de aşağıdaki adımlardan birkaçı farklıdır.

IIS'de OWIN barındırma

Bu bölümde, OWIN'i IIS'de barındıracağız. Bu seçenek, IIS'nin olgun özellik kümesiyle birlikte bir OWIN işlem hattının esnekliğini ve bir araya getirilebilirliğini sağlar. Bu seçeneği kullanarak OWIN uygulaması ASP.NET istek işlem hattında çalışır.

İlk olarak, yeni bir ASP.NET Web Uygulaması projesi oluşturun. (Visual Studio 2012'de Boş Web Uygulaması proje türünü ASP.NET kullanın.)

Yeni ASP.NET proje çizimi

Yeni ASP.NET Projesi iletişim kutusunda Boş şablonu seçin.

Örnek çizim

NuGet Paketleri Ekleme

Ardından gerekli NuGet paketlerini ekleyin. Araçlar menüsünde NuGet Paket Yöneticisi'ni ve ardından Paket Yöneticisi Konsolu'nu seçin. Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu yazın:

install-package Microsoft.Owin.Host.SystemWeb –Pre

Paket Yöneticisi'nin yüklenmesi, örnek çizim

Başlangıç Sınıfı Ekleme

Ardından bir OWIN başlangıç sınıfı ekleyin. Çözüm Gezgini'da projeye sağ tıklayın ve Ekle'yi ve ardından Yeni Öğe'yi seçin. Yeni Öğe Ekle iletişim kutusunda Owin Başlangıç sınıfı'nı seçin. Başlangıç sınıfını yapılandırma hakkında daha fazla bilgi için bkz. OWIN Başlangıç Sınıfı Algılama.

Başlangıç Sınıfı örneği ekleme

Startup1.Configuration yöntemine aşağıdaki kodu ekleyin:

public void Configuration(IAppBuilder app)
{
    // New code:
    app.Run(context =>
    {
        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

Bu kod, Microsoft.Owin.IOwinContext örneğini alan bir işlev olarak uygulanan OWIN işlem hattına basit bir ara yazılım ekler. Sunucu bir HTTP isteği aldığında, OWIN işlem hattı ara yazılımı çağırır. Ara yazılım yanıt için içerik türünü ayarlar ve yanıt gövdesini yazar.

Not

OWIN Başlangıç sınıfı şablonu Visual Studio 2013'de kullanılabilir. Visual Studio 2012 kullanıyorsanız, adlı Startup1yeni bir boş sınıf ekleyin ve aşağıdaki kodu yapıştırın:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(OwinApp.Startup1))]

namespace OwinApp
{
    public class Startup1
    {
        public void Configuration(IAppBuilder app)
        {
          app.Run(context =>
          {
              context.Response.ContentType = "text/plain";
              return context.Response.WriteAsync("Hello, world.");
          });
        }
    }
}

Uygulamayı Çalıştırma

Hata ayıklamaya başlamak için F5 tuşuna basın. Visual Studio, için http://localhost:*port*/bir tarayıcı penceresi açar. Sayfa aşağıdaki gibi görünmelidir:

Başarılı sayfa yükleme çizimi

Konsol Uygulamasında OWIN Self-Host

Bu uygulamayı IIS barındırmadan özel bir işlemde kendi kendine barındırmaya dönüştürmek kolaydır. IIS barındırma ile IIS, hem HTTP sunucusu hem de hizmeti barındıran işlem olarak davranır. Kendi kendine barındırma ile uygulamanız işlemi oluşturur ve HTTP sunucusu olarak HttpListener sınıfını kullanır.

Visual Studio'da yeni bir konsol uygulaması oluşturun. Paket Yöneticisi Konsolu penceresinde aşağıdaki komutu yazın:

Install-Package Microsoft.Owin.SelfHost -Pre

Bu öğreticinin 1. bölümünden projeye bir Startup1 sınıf ekleyin. Bu sınıfı değiştirmeniz gerekmez.

Uygulamanın Main yöntemini aşağıdaki gibi uygulayın.

class Program
{
    static void Main(string[] args)
    {
        using (Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000"))
        {
            Console.WriteLine("Press [enter] to quit...");
            Console.ReadLine();
        }
    }
}

Konsol uygulamasını çalıştırdığınızda, sunucu dinlemeye http://localhost:9000başlar. Bu adrese bir web tarayıcısında giderseniz "Merhaba dünya" sayfasını görürsünüz.

Konsol dinleme görüntüsü örneği

OWIN Tanılaması Ekleme

Microsoft.Owin.Diagnostics paketi, işlenmeyen özel durumları yakalayan ve hata ayrıntılarını içeren bir HTML sayfası görüntüleyen ara yazılım içerir. Bu sayfa, bazen "sarı ölüm ekranı" (YSOD) olarak adlandırılan ASP.NET hata sayfası gibi çalışır. YSOD gibi Katana hata sayfası da geliştirme sırasında kullanışlıdır, ancak üretim modunda devre dışı bırakmak iyi bir uygulamadır.

Tanılama paketini projenize yüklemek için Paket Yöneticisi Konsolu penceresine aşağıdaki komutu yazın:

install-package Microsoft.Owin.Diagnostics –Pre

Yönteminizdeki Startup1.Configuration kodu aşağıdaki gibi değiştirin:

public void Configuration(IAppBuilder app)
{
    // New code: Add the error page middleware to the pipeline. 
    app.UseErrorPage();

    app.Run(context =>
    {
        // New code: Throw an exception for this URI path.
        if (context.Request.Path.Equals(new PathString("/fail")))
        {
            throw new Exception("Random exception");
        }

        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

Şimdi CTRL+F5 tuşlarını kullanarak uygulamayı hata ayıklamadan çalıştırın, böylece Visual Studio özel durumda bozulmaz. Uygulama, konumuna http://localhost/failgelene kadar öncekiyle aynı şekilde davranır ve bu noktada uygulama özel durum oluşturur. Hata sayfası ara yazılımı özel durumu yakalar ve hata hakkında bilgi içeren bir HTML sayfası görüntüler. Yığın, sorgu dizesi, tanımlama bilgileri, istek üst bilgisi ve OWIN ortam değişkenlerini görmek için sekmelere tıklayabilirsiniz.

Rastgele örnek görüntü örneği

Sonraki Adımlar