В самообслуживании 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?
Ответы
Ответ 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