tutorial net asp c# asp.net-web-api owin

c# - net - En la API web de OWIN alojada en uno mismo, ¿cómo ejecutar código al apagar?



owin web api (2)

Me autohosting una API web de OWIN usando estos fragmentos de código:

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")

Me gustaría ejecutar algún código cuando se cierre mi servicio Web API. Estoy buscando algo como HttpApplication.Application_End , un evento HttpApplication.Application_End , o un override void Dispose() bien colocado.

¿Cómo ejecuto el código cuando el servicio de API web se apaga?


Creo que hay una mejor manera de obtener el CancellationToken :

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

AppProperties encuentra en el espacio de nombres Microsoft.Owin.BuilderProperties , que proviene de este paquete nuget: http://www.nuget.org/packages/Microsoft.Owin/

La descripción de la propiedad OnAppDisposing dice:

Obtiene o establece el token de cancelación para "host.OnAppDisposing".

Consulte: http://msdn.microsoft.com/en-us/library/microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx


Esto se puede lograr obteniendo el token de cancelación del host y registrando una devolución de llamada como si fuera

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 }); } } }

Una persona del equipo de Katana me dijo que esta clave es para la funcionalidad específica del host y, por lo tanto, puede que no exista en todos los hosts. Microsoft.Owin.Host.SystemWeb implementa esto, pero no estoy seguro acerca de los demás.

La forma más fácil de verificar si esto funciona para usted es verificar la host.OnAppDisposing . host.OnAppDisposing clave host.OnAppDisposing .