2014-04-27 10 views
40

Jestem self-gospodarzem OWIN Web API za pomocą tych fragmentów kodu:W samohostowanym interfejsie API OWIN Web, jak uruchomić kod przy wyłączaniu?

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

Chciałbym uruchomić jakiś kod, kiedy mój serwis Web API wyłącza. Szukam czegoś takiego jak HttpApplication.Application_End, wydarzenie Disposed lub dobrze umieszczone override void Dispose().

Jak uruchomić kod po wyłączeniu usługi Web API?

Odpowiedz

51

Można to osiągnąć poprzez uzyskanie anulowanie hosta żeton i rejestracji wywołania zwrotnego z nią jak tak

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

powiedziano mi przez kogoś w zespole Katana, że ​​ten klucz jest dla konkretnej funkcji gospodarza, a zatem nie może istnieje na wszystkich hostach. Microsoft.Owin.Host.SystemWeb implementuje to, ale nie jestem pewien co do innych.

Najprostszym sposobem sprawdzenia, czy to zadziała, jest sprawdzenie app.Properties dla klucza host.OnAppDisposing.

+0

testowałem to i to działa. Dziękuję Ci! – Wally

+0

@Wally: Byłoby wspaniale, gdybyś wyjaśnił, jak to przetestować. – LMK

+0

Aby to przetestować, wyrzuć wynik wywołania WebApp () i obserwuj kod w akcji token.Register() wykonaj. – mheyman

59

myślę, że jest lepszy sposób, aby uzyskać CancellationToken:

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

AppProperties jest pod nazw Microsoft.Owin.BuilderProperties, który pochodzi z tego pakietu Nuget: http://www.nuget.org/packages/Microsoft.Owin/

Opis nieruchomości OnAppDisposing mówi:

Pobiera lub ustawia token anulowania dla "host.OnAppDisposing".

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

+0

Co zrobić z wystąpieniem "właściwości"? – mikesigs

+0

Możesz go wyrzucić, to tylko opakowanie o nazwie 'app.Properties'. – TiMoch

Powiązane problemy