2014-04-27 2 views
40

मैं कर रहा हूँ स्वयं की मेजबानी इन कोड के टुकड़े का उपयोग कर एक Owin वेब एपीआई:स्व-होस्टेड ओविन वेब एपीआई में, शट डाउन पर कोड कैसे चलाएं?

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

मैं जब मेरे जाल एपीआई सेवा बंद हो जाता है कुछ कोड को चलाने के लिए चाहते हैं। मैं HttpApplication.Application_End, Disposed ईवेंट, या एक अच्छी तरह से रखा override void Dispose() जैसे कुछ ढूंढ रहा हूं।

वेब एपीआई सेवा बंद होने पर मैं कोड कैसे चला सकता हूं?

उत्तर

51

यह मेजबान रद्द करने टोकन हो रही है और इसलिए

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

मैं कटाना टीम पर किसी के द्वारा बताया गया था कि इस कुंजी मेजबान विशिष्ट कार्यक्षमता के लिए है जैसे कि यह साथ एक कॉलबैक पंजीकरण करके प्राप्त किया जा सकता है और इसलिए नहीं हो सकता सभी मेजबानों पर मौजूद है। Microsoft.Owin.Host.SystemWeb इसे कार्यान्वित करता है, लेकिन मुझे दूसरों के बारे में निश्चित नहीं है।

यह सत्यापित करने का सबसे आसान तरीका है कि यह आपके लिए काम करेगा, host.OnAppDisposing कुंजी के लिए app.Properties जांचना है।

+0

मैंने इसका परीक्षण किया और यह काम करता है। धन्यवाद! – Wally

+0

@ वैली: यदि आप इसका परीक्षण कैसे करें, तो यह बहुत अच्छा होगा। – LMK

+0

इसका परीक्षण करने के लिए, वेबएप () कॉल के परिणाम का निपटान करें और टोकन में कोड देखें। रजिस्ट्रार() क्रिया निष्पादित करें .. – mheyman

59

मुझे लगता है कि वहाँ पाने के लिए एक बेहतर तरीका है CancellationToken: http://www.nuget.org/packages/Microsoft.Owin/

संपत्ति के OnAppDisposing विवरण का कहना है::

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

AppProperties जो इस nuget पैकेज से आता है नाम स्थान Microsoft.Owin.BuilderProperties किया जा रहा है,

"host.OnAppDisposing" के लिए रद्दीकरण टोकन प्राप्त या सेट करता है।

कृपया देखें: http://msdn.microsoft.com/en-us/library/microsoft.owin.builderproperties.appproperties%28v=vs.113%29.aspx

+0

'गुण'' के उदाहरण के साथ आप क्या करते हैं? – mikesigs

+0

आप इसे फेंक सकते हैं, यह सिर्फ 'ऐप' प्रॉपर्टीज के आसपास एक रैपर है। – TiMoch

संबंधित मुद्दे