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 プロジェクト ] ダイアログで、 空 のテンプレートを選択します。
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 環境変数を表示できます。
次の手順
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示