web-dev-qa-db-ja.com

自己ホスト型OWIN Web APIで、シャットダウン時にコードを実行する方法は?

これらのコードスニペットを使用して、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サービスがシャットダウンしたときにコードを実行するにはどうすればよいですか?

41
Wallace Kelly

これは、ホストのキャンセルトークンを取得し、そのようにコールバックを登録することで実現できます。

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キー。

56
Brian Surowiec

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」のキャンセルトークンを取得または設定します。

参照してください: http://msdn.Microsoft.com/en-us/library/Microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx

64
arthas