簡體   English   中英

在自托管 OWIN Web API 中,如何在關機時運行代碼?

[英]In self-hosted OWIN Web API, how to run code at shutdown?

我使用以下代碼片段自托管 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_EndDisposed事件或放置良好的override void Dispose()之類的東西。

Web API服務關閉時如何運行代碼?

我認為有更好的方法來獲取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

這可以通過獲取主機的取消令牌並像這樣注冊回調來實現

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鍵。

這與阿爾薩斯的答案相同,但我已將其制成擴展方法

public static IAppBuilder RegisterShutdown(this IAppBuilder app, Action callback)
{
    if (app == null)
    {
        throw new ArgumentNullException(nameof(app));
    }

    var properties = new AppProperties(app.Properties);
    var token = properties.OnAppDisposing;

    if (token != CancellationToken.None)
    {
        token.Register(callback);
    }

    return app;
}

因為這樣您就可以輕松注冊關閉操作

app.RegisterShutdown(() => Serilog.Log.CloseAndFlush());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM