Подтвердить что ты не робот

В самообслуживании 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")

Я хотел бы запустить некоторый код, когда моя служба веб-API отключится. Я ищу что-то вроде HttpApplication.Application_End, a Disposed событие или хорошо размещенную override void Dispose().

Как запустить код при отключении службы веб-API?

4b9b3361

Ответ 1

Это может быть достигнуто путем приема маркера отмены хоста и регистрации обратного вызова с ним следующим образом

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.

Ответ 2

Я думаю, что есть лучший способ получить 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