OWIN スタートアップ クラス検出
このチュートリアルでは、読み込まれる OWIN スタートアップ クラスを構成する方法について説明します。 OWIN の詳細については、「 プロジェクト カタナの概要」を参照してください。 このチュートリアルは、Rick Anderson ( @RickAndMSFT )、Praburaj Thiagarajan、および Howard Dierking ( @howard_dierking ) によって作成されました。
必須コンポーネント
OWIN スタートアップ クラス検出
すべての OWIN アプリケーションには、アプリケーション パイプラインのコンポーネントを指定するスタートアップ クラスがあります。 選択したホスティング モデル (OwinHost、IIS、IIS-Express) に応じて、スタートアップ クラスをランタイムに接続する方法はさまざまです。 このチュートリアルで示すスタートアップ クラスは、すべてのホスティング アプリケーションで使用できます。 次のいずれかの方法を使用して、スタートアップ クラスをホスティング ランタイムに接続します。
名前付け規則: Katana は、アセンブリ名またはグローバル名前空間に一致する 名前空間で という名前
Startup
のクラスを検索します。OwinStartup 属性: これは、ほとんどの開発者がスタートアップ クラスを指定するために行うアプローチです。 次の属性は、スタートアップ クラスを 名前空間の
TestStartup
クラスにStartupDemo
設定します。[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
属性は
OwinStartup
、名前付け規則をオーバーライドします。 この属性を使用してフレンドリ名を指定することもできますが、フレンドリ名を使用するには、構成ファイルの 要素も使用appSetting
する必要があります。構成ファイルの appSetting 要素: 要素は
appSetting
、属性と名前付け規則をOwinStartup
オーバーライドします。 複数のスタートアップ クラス (それぞれ属性を使用) をOwinStartup
持ち、次のようなマークアップを使用して、構成ファイルに読み込むスタートアップ クラスを構成できます。<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
スタートアップ クラスとアセンブリを明示的に指定する次のキーも使用できます。
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
構成ファイル内の次の XML は、 のフレンドリ スタートアップ クラス名を
ProductionConfiguration
指定します。<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
上記のマークアップは、フレンドリ名を指定し、 クラスを実行する次
OwinStartup
のProductionStartup2
属性と共に使用する必要があります。[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } public class ProductionStartup2 { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " 2nd Production OWIN App"); }); } } }
OWIN スタートアップ検出を無効にするには、web.config ファイルに の
"false"
値を指定して を追加appSetting owin:AutomaticAppStartup
します。<add key="owin:AutomaticAppStartup" value="false" />
OWIN スタートアップを使用して ASP.NET Web アプリを作成する
空の Asp.Net Web アプリケーションを作成し、 StartupDemo という名前を付けます。 - NuGet パッケージ マネージャーを使用してインストール
Microsoft.Owin.Host.SystemWeb
します。 [ツール] メニューの [NuGet パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 次のコマンドを入力します。Install-Package Microsoft.Owin.Host.SystemWeb
OWIN スタートアップ クラスを追加します。 Visual Studio 2017 でプロジェクトを右クリックし、[クラスの 追加] を選択します。- [ 新しい項目の追加 ] ダイアログ ボックスで、検索フィールドに 「OWIN 」と入力し、名前を Startup.cs に変更して、[ 追加] を選択します。
次回 Owin Startup クラスを追加する場合は、[ 追加] メニューから使用できるようになります。
または、プロジェクトを右クリックして [ 追加] を選択し、[ 新しい項目] を選択して、 Owin Startup クラスを選択することもできます。
Startup.cs ファイルで生成されたコードを次のように置き換えます。
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo { public class Startup { public void Configuration(IAppBuilder app) { app.Use((context, next) => { TextWriter output = context.Get<TextWriter>("host.TraceOutput"); return next().ContinueWith(result => { output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}", context.Request.Scheme, context.Request.Method, context.Request.Path, getTime()); }); }); app.Run(async context => { await context.Response.WriteAsync(getTime() + " My First OWIN App"); }); } string getTime() { return DateTime.Now.Millisecond.ToString(); } } }
app.Use
ラムダ式は、指定したミドルウェア コンポーネントを OWIN パイプラインに登録するために使用されます。 この場合、受信要求に応答する前に、受信要求のログ記録を設定します。 パラメーターはnext
、パイプライン内の次のコンポーネントへのデリゲート ( Func<Task> ) です。 ラムダ式はapp.Run
、パイプラインを受信要求にフックし、応答メカニズムを提供します。Note
上記のコードでは、 属性を
OwinStartup
コメントアウトし、 という名前Startup
のクラスを実行する規則に依存しています。- F5 キーを押してアプリケーションを実行します。 数回の更新をヒットします。注: このチュートリアルの画像に表示される番号は、表示される数値と一致しません。 ミリ秒の文字列は、ページを更新するときに新しい応答を表示するために使用されます。 トレース情報は [出力 ]ウィンドウで確認できます。
その他のスタートアップ クラスを追加する
このセクションでは、別の Startup クラスを追加します。 複数の OWIN スタートアップ クラスをアプリケーションに追加できます。 たとえば、開発、テスト、運用のためのスタートアップ クラスを作成できます。
新しい OWIN スタートアップ クラスを作成し、 という名前を付けます
ProductionStartup
。生成されたコードを次のコードに置き換えます。
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } }
Ctrl F5 キーを押してアプリを実行します。 属性は
OwinStartup
、運用スタートアップ クラスが実行されていることを指定します。別の OWIN スタートアップ クラスを作成し、 という名前を付けます
TestStartup
。生成されたコードを次のコードに置き換えます。
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))] namespace StartupDemo { public class TestStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Test OWIN App"); }); } } }
上記の属性オーバーロードは
OwinStartup
、TestingConfiguration
Startup クラスの フレンドリ 名として を指定します。web.config ファイルを開き、スタートアップ クラスのフレンドリ名を指定する OWIN アプリスタートアップ キーを追加します。
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="TestingConfiguration" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
Ctrl F5 キーを押してアプリを実行します。 アプリ設定要素が優先され、テスト構成が実行されます。
クラスの 属性から
OwinStartup
フレンドリ名をTestStartup
削除します。[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
web.config ファイルの OWIN アプリスタートアップ キーを次のように置き換えます。
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
各クラスの属性を
OwinStartup
、Visual Studio によって生成された既定の属性コードに戻します。[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
以下の OWIN アプリのスタートアップ キーごとに、運用クラスが実行されます。
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
最後のスタートアップ キーは、スタートアップ構成方法を指定します。 次の OWIN アプリスタートアップ キーを使用すると、構成クラスの名前を に
MyConfiguration
変更できます。<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
Owinhost.exeの使用
Web.config ファイルを次のマークアップに置き換えます。
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="StartupDemo.Startup" /> <add key="owin:appStartup" value="StartupDemo.TestStartup" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
最後のキーが優先されるため、この場合
TestStartup
は を指定します。PMC から Owinhost をインストールします。
Install-Package OwinHost
アプリケーション フォルダー ( Web.config ファイルを含むフォルダー) に移動し、コマンド プロンプトで次のように入力します。
..\packages\Owinhost<Version>\tools\Owinhost.exe
コマンド ウィンドウに次の情報が表示されます。
C:\StartupDemo\StartupDemo>..\packages\OwinHost.2.0.0\tools\Owin Host.exe Starting with the default port: 5000 (http://localhost:5000/) Started successfully Press Enter to exit
URL
http://localhost:5000/
を使用してブラウザーを起動します。OwinHost は、上記のスタートアップ規則に従いました。
コマンド ウィンドウで Enter キーを押して OwinHost を終了します。
クラスに
ProductionStartup
、 ProductionConfiguration のフレンドリ名を指定する次の OwinStartup 属性を追加します。[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
コマンド プロンプトで、次のように入力します。
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
運用スタートアップ クラスが読み込まれます。
アプリケーションには複数のスタートアップ クラスがあり、この例では、ランタイムまで読み込むスタートアップ クラスを延期しています。
次のランタイム スタートアップ オプションをテストします。
..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup,StartupDemo" ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup.Configuration ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup.Configuration,StartupDemo"
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示