2014-04-27 20 views
40

Ben kendi kendine barındırmayı bu kod parçacıklarını kullanarak bir Owin Web API:Kendinden barındırılan OWIN Web API'sinde, kapatma sırasında kod nasıl çalıştırılır?

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") 
benim Web API hizmeti kapatıldığında bazı kodlar çalıştırmak istiyorum

. HttpApplication.Application_End, Disposed olayı veya iyi yerleştirilmiş bir override void Dispose() gibi bir şey arıyorum.

Web API hizmeti kapandığında kodu nasıl çalıştırırım?

cevap

51

Bu nedenle konağın iptali belirteci almak ve bu anahtar konak belirli işlevler için olduğunu Katana takımında birisi tarafından söylendi bu yüzden

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

gibi onunla bir geri arama kaydederek elde edilebilir olmayabilir tüm ana bilgisayarlarda var. Microsoft.Owin.Host.SystemWeb bunu uygular, ancak diğerleri hakkında emin değilim.

Bunun sizin için işe yarayıp yaramadığını doğrulamanın en kolay yolu, host.OnAppDisposing anahtarı için app.Properties denetlemektir.

+0

Bunu test ettim ve işe yarıyor. Teşekkür ederim! – Wally

+0

@Wally: Nasıl test edeceğinizi açıklarsanız harika olur. – LMK

+0

Test etmek için, WebApp () çağrısının sonucunu atın ve token.Register() eylemi yürütme kodunu izleyin. – mheyman

59

ben almak için daha iyi bir yol olduğunu düşünüyorum CancellationToken: http://www.nuget.org/packages/Microsoft.Owin/

OnAppDisposing özelliğinin açıklaması diyor:

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

AppProperties bu Nuget paketinden geldiği, ad Microsoft.Owin.BuilderProperties altındadır

“host.OnAppDisposing” için iptal belirtecisini alır veya ayarlar.

Lütfen bakınız: http://msdn.microsoft.com/en-us/library/microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx

+0

"Özellikler" örneğinde ne yaparsınız? – mikesigs

+0

Onu atabilirsin, sadece 'app.Properties' etrafında bir sarıcı. – TiMoch

İlgili konular