J'héberge moi-même une API Web OWIN à l'aide des extraits de code suivants:
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")
Je voudrais exécuter du code lorsque mon service d'API Web s'arrête. Je recherche quelque chose comme HttpApplication.Application_End
, Un événement Disposed
ou une override void Dispose()
bien placée.
Comment exécuter du code lorsque le service API Web s'arrête?
Ceci peut être réalisé en obtenant le jeton d'annulation de l'hôte et en enregistrant un rappel avec lui comme ceci
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
});
}
}
}
Un membre de l'équipe Katana m'a dit que cette clé est destinée à des fonctionnalités spécifiques à l'hôte et qu'elle peut donc ne pas exister sur tous les hôtes. Microsoft.Owin.Host.SystemWeb met en œuvre cela, mais je ne suis pas sûr des autres.
La façon la plus simple de vérifier si cela fonctionne pour vous est de vérifier app.Properties
pour le Host.OnAppDisposing
clé.
Je pense qu'il y a une meilleure façon d'obtenir le CancellationToken
:
var properties = new AppProperties(app.Properties);
CancellationToken token = properties.OnAppDisposing;
AppProperties
est sous l'espace de noms Microsoft.Owin.BuilderProperties
, qui provient de ce paquet nuget: http://www.nuget.org/packages/Microsoft.Owin/
La description de la propriété OnAppDisposing
dit:
Obtient ou définit le jeton d'annulation pour "Host.OnAppDisposing".
Veuillez vous référer à: http://msdn.Microsoft.com/en-us/library/Microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx