OWIN と Katana の概要

Open Web Interface for .NET (OWIN) は、.NET Web サーバーと Web アプリケーションの間の抽象化を定義します。 OWIN では、アプリケーションから Web サーバーを分離することで、.NET Web 開発用のミドルウェアを簡単に作成できます。 また、OWIN を使用すると、Web アプリケーションを他のホスト (Windows サービスやその他のプロセスでのセルフホスティングなど) に簡単に移植できます。

OWIN はコミュニティ所有の仕様であり、実装ではありません。 Katana プロジェクトは、Microsoft によって開発されたオープンソースの OWIN コンポーネントのセットです。 OWIN と Katana の両方の概要については、「 Project Katana の概要」を参照してください。 この記事では、使用を開始するためのコードにすぐに取り組みます。

このチュートリアルでは、リリース候補Visual Studio 2013使用しますが、Visual Studio 2012 を使用することもできます。 Visual Studio 2012 では、いくつかの手順が異なります。以下に注意してください。

IIS で OWIN をホストする

このセクションでは、IIS で OWIN をホストします。 このオプションを使用すると、OWIN パイプラインの柔軟性と構成可能性を、IIS の成熟した機能セットと共に使用できます。 このオプションを使用すると、OWIN アプリケーションは ASP.NET 要求パイプラインで実行されます。

まず、新しい ASP.NET Web アプリケーション プロジェクトを作成します。 (Visual Studio 2012 では、ASP.NET 空の Web アプリケーション プロジェクトの種類を使用します)。

新しい ASP.NET プロジェクトの図

[ 新しい ASP.NET プロジェクト ] ダイアログで、 のテンプレートを選択します。

例の図

NuGet パッケージの追加

次に、必要な NuGet パッケージを追加します。 [ツール] メニューの [NuGet パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。

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

パッケージ マネージャーのインストール、図の例

スタートアップ クラスを追加する

次に、OWIN スタートアップ クラスを追加します。 ソリューション エクスプローラーでプロジェクトを右クリックし、[追加] を選択し、[新しい項目] を選択します。 [ 新しい項目の追加 ] ダイアログで、[ Owin スタートアップ クラス] を選択します。 スタートアップ クラスの構成の詳細については、「 OWIN スタートアップ クラスの検出」を参照してください。

スタートアップ クラスの追加の例

Startup1.Configuration メソッドに次のコードを追加します。

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

このコードは、 Microsoft.Owin.IOwinContext インスタンスを受け取る関数として実装された、OWIN パイプラインに単純なミドルウェアを追加します。 サーバーが HTTP 要求を受信すると、OWIN パイプラインによってミドルウェアが呼び出されます。 ミドルウェアは、応答のコンテンツ タイプを設定し、応答本文を書き込みます。

Note

OWIN スタートアップ クラス テンプレートは、Visual Studio 2013で使用できます。 Visual Studio 2012 を使用している場合は、 という名前 Startup1の新しい空のクラスを追加し、次のコードを貼り付けます。

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

アプリケーションの実行

F5 キーを押してデバッグを開始します。 Visual Studio によって、 の http://localhost:*port*/ブラウザー ウィンドウが開きます。 ページは次のようになります。

正常なページ読み込みの図

コンソール アプリケーションで OWIN をSelf-Hostする

このアプリケーションを IIS ホスティングからカスタム プロセスでのセルフホスティングに簡単に変換できます。 IIS ホスティングでは、IIS は HTTP サーバーとサービスをホストするプロセスの両方として機能します。 セルフホスティングでは、アプリケーションによってプロセスが作成され、HTTP サーバーとして HttpListener クラスが使用されます。

Visual Studio で、新しいコンソール アプリケーションを作成します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。

Install-Package Microsoft.Owin.SelfHost -Pre

このチュートリアルの Startup1 パート 1 のクラスをプロジェクトに追加します。 このクラスを変更する必要はありません。

アプリケーションの メソッドを Main 次のように実装します。

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

コンソール アプリケーションを実行すると、サーバーは の http://localhost:9000リッスンを開始します。 Web ブラウザーでこのアドレスに移動すると、"Hello world" ページが表示されます。

コンソールリスニングイメージの例

OWIN 診断の追加

Microsoft.Owin.Diagnostics パッケージには、未処理の例外をキャッチし、エラーの詳細を含む HTML ページを表示するミドルウェアが含まれています。 このページは、"黄色の死の画面" (YSOD) と呼ばれる ASP.NET エラー ページとよく似ています。 YSOD と同様に、Katana エラー ページは開発中に役立ちますが、運用モードで無効にすることをお勧めします。

プロジェクトに診断パッケージをインストールするには、[パッケージ マネージャー コンソール] ウィンドウで次のコマンドを入力します。

install-package Microsoft.Owin.Diagnostics –Pre

メソッドのコードを Startup1.Configuration 次のように変更します。

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

次に、Ctrl + F5 キーを押してデバッグなしでアプリケーションを実行し、Visual Studio が例外で中断しないようにします。 に移動 http://localhost/failするまで、アプリケーションは以前と同じように動作します。この時点で、アプリケーションは例外をスローします。 エラー ページ ミドルウェアは例外をキャッチし、エラーに関する情報を含む HTML ページを表示します。 タブをクリックすると、スタック、クエリ文字列、Cookie、要求ヘッダー、OWIN 環境変数を表示できます。

ランダムな実行イメージの例

次の手順