これらのコードスニペットを使用して、OWIN Web APIを自己ホストしています。
_class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
var route = config.Routes.MapHttpRoute("DefaultApi", "{controller}");
appBuilder.UseWebApi(config);
}
}
WebApp.Start<Startup>("http://localhost:8080")
_
Web APIサービスがシャットダウンしたときにコードを実行したいと思います。 _HttpApplication.Application_End
_、Disposed
イベント、または適切に配置されたoverride void Dispose()
のようなものを探しています。
Web APIサービスがシャットダウンしたときにコードを実行するにはどうすればよいですか?
これは、ホストのキャンセルトークンを取得し、そのようにコールバックを登録することで実現できます。
public class Startup
{
public void Configuration(IAppBuilder app)
{
var context = new OwinContext(app.Properties);
var token = context.Get<CancellationToken>("Host.OnAppDisposing");
if (token != CancellationToken.None)
{
token.Register(() =>
{
// code to run
});
}
}
}
Katanaチームの誰かから、このキーはホスト固有の機能用であるため、すべてのホストに存在するとは限らないと言われました。 Microsoft.Owin.Host.SystemWeb はこれを実装していますが、他のものについてはわかりません。
これが機能するかどうかを確認する最も簡単な方法は、app.Properties
のために Host.OnAppDisposing
キー。
CancellationToken
を取得するより良い方法があると思います:
var properties = new AppProperties(app.Properties);
CancellationToken token = properties.OnAppDisposing;
AppProperties
は名前空間の下にあるMicrosoft.Owin.BuilderProperties
、これはこのnugetパッケージからのものです。 http://www.nuget.org/packages/Microsoft.Owin/
プロパティOnAppDisposing
の説明は次のとおりです。
「Host.OnAppDisposing」のキャンセルトークンを取得または設定します。