web-dev-qa-db-fra.com

Dans l'API Web OWIN auto-hébergée, comment exécuter le code à l'arrêt?

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?

42
Wallace Kelly

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é.

57
Brian Surowiec

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

66
arthas