2011-08-30 11 views
5

शुरू हुई तो मैं अपनी डब्ल्यूसीएफ सेवा शुरू करने के बाद कुछ करना चाहता हूं। यह कैसे कर सकता हैकुछ करें जब मेरी डब्ल्यूसीएफ सेवा

वास्तव में, मुझे हर 10 मिनट में मेरी सेवा के कुछ चर को अद्यतन करना चाहिए। इसलिए मैंने अपना अपडेट कोड थ्रेड में रखा। लेकिन मुझे नहीं पता कि सेवा शुरू होने पर यह धागा कैसे शुरू होता है (क्या डब्ल्यूसीएफ सेवाओं में फॉर्म_लोड ईवेंट को कुछ पसंद आया है?)

+1

आप अपनी डब्ल्यूसीएफ सेवा कैसे होस्ट करते हैं? – Jan

उत्तर

2

सर्वर पर थ्रेड चलाना मुश्किल है। जैसे ही अंतिम सत्र समाप्त हो जाता है, एप्लिकेशन बंद हो जाता है। कुछ होस्टिंग प्रदाता भी एक शेड्यूल पर ऐप पूल रीसायकल करते हैं जो थ्रेड चलाने के किसी भी मौके को मारता है।

उस तरफ, डब्ल्यूसीएफ सेवाएं वास्तव में नहीं चलती हैं। वे अनुरोध द्वारा ट्रिगर किए गए वेब पृष्ठों की तरह कार्य करते हैं। इनिट कोड जोड़ने के लिए समझदार स्थान Global.asax में आपके Application_Start में होगा। आवेदन शुरू होने पर यह एक बार कॉल किया जाएगा (पहला अनुरोध किया गया है)।

यदि आप अपनी सेवाओं के लिए प्रत्येक अनुरोध पर कुछ करना चाहते हैं, तो आप ईवेंट Global.asax में भी हुक कर सकते हैं।

+0

'ग्लोबल.एक्सएक्स'? ;) – Marc

+0

@Marc: पी - निश्चित – TheCodeKing

+0

क्या होगा यदि वह विंडोज सेवा में या स्वयं-होस्ट किए गए एप्लिकेशन में डब्ल्यूसीएफ होस्ट करता है? वहां कोई वैश्विक नहीं है। यह उस अर्थ में एक वेब अनुप्रयोग के रूप में कार्य नहीं करता है। प्लस डब्ल्यूसीएफ सत्र का उपयोग नहीं कर सकता है। – oleksii

5

आमतौर पर आपकी डब्ल्यूसीएफ सेवा का कोई भी भाग नहीं है जो कुछ करने के लिए तैयार स्मृति में "बस लटक रहा है" .... डब्ल्यूसीएफ एएसपी.नेट नहीं है!

डिफ़ॉल्ट सेटअप जब IIS में होस्टिंग यह है:

  • आईआईएस एक अनुरोध के लिए एक विशिष्ट पोर्ट/यूआरएल पर सुनता है - वहाँ स्मृति में कहीं भी अपने WCF सेवा के एक भी निशान नहीं है

  • जब पहला अनुरोध आता है, तो आईआईएस ServiceHost को स्पिन करेगा - एक वर्ग जो सेवा को "होस्ट" कर सकती है

  • यह सेवा होस्ट तब देखेंगे कि अनुरोध URL में आया है और यह निर्णय लेगा ई कौन सा सेवा वर्ग इस अनुरोध को संभालने के लिए तत्काल है। सेवा वर्ग (आपकी सेवा कार्यान्वयन) तो बनाई गई है और कहा कि सेवा वर्ग पर उचित विधि कहा जाता है और मार डाला जाता है, और वह पूरा हो जाएगा एक बार, सेवा वर्ग

निपटान किया जाता है तो बुनियादी तौर पर, वहाँ दो अंक आप कहीं भी हों हुक कर सके:

  1. आप अपने स्वयं के कस्टम ServiceHost वर्ग है कि कुछ जब यह

  2. आप अपनी सेवा वर्ग metho से प्रत्येक के लिए कुछ "प्रारंभ" कोड जोड़ सकते हैं instantiated हो जाता है क्या करेंगे बना सकते हैं डी एस अपनी आवश्यकताओं को संभालने के लिए

+1

अन्य प्रकार की होस्टिंग के बारे में क्या? यह आईआईएस विशिष्ट है। विन सेवा होस्टिंग में, उदाहरण के लिए, ओपी एक टाइमर बना सकता है और ऐसा करने के लिए टिक ईवेंट का उपयोग कर सकता है। – oleksii

+0

@oleksii: जब आप स्वयं-होस्ट करते हैं, हाँ, आपके पास थोड़ा अधिक नियंत्रण होता है - लेकिन फिर भी - आप मूल रूप से सेवा होस्ट को ट्विक कर सकते हैं जो आपके नियंत्रण में तत्काल हो जाता है, या आप सेवा विधि में कुछ करते हैं, जब इसे –

+0

कहा जाता है अगर किसी को स्मृति में कुछ "बस लटका" चाहिए तो क्या करना चाहिए? – AjaxLeung

0

आप एक instanced सेवा है, जो आपकी सेवा के प्रारंभ पर निर्माता कॉल करेंगे बना सकते हैं:

[ServiceContract] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class InstanceService 
{ 
    private int _intValue; 

    public InstanceService() 
    { 
     _intValue = 456; 
    } 

    [OperationContract] 
    public int GetData() 
    { 
     return _intValue; 
    } 
} 

इस सेवा पर GetData() लागू करके एक पूर्णांक वापस आ जाएगी 456 का मूल्य।

+3

इस तरह के एक सिंगलटन सेवा उदाहरण में दो प्रमुख दोष हैं: 1) यह या तो अनुरोधों को क्रमबद्ध करता है और एक दूसरे के बाद एक को संभालने, संभावित रूप से भारी बाधा उत्पन्न करने के लिए - या 2) इसे पूरी तरह से बहु-थ्रेडिंग जागरूक प्रोग्रामिंग की आवश्यकता होती है, जो कुछ भी आसान नहीं है प्रवण त्रुटि। जब भी संभव हो मैं सिंगलेट्स से बचने की कोशिश करता हूं –

+0

आप सही हैं, मैं यह उल्लेख करना भूल गया कि यह केवल बहुत विशिष्ट स्थितियों में उपयोगी होगा, और ऐसा कुछ नहीं है जिसे आसानी से माना जाना चाहिए। – CodeCaster

0

यह हासिल किया जा सकता है यदि आप इसे होस्ट करने के तरीके को नियंत्रित करने में सक्षम हैं। यदि आप कर सकते हैं, तो अपनी डब्ल्यूसीएफ सेवा को विंडोज सेवा या निष्पादन योग्य विज्ञापन के रूप में होस्ट करें। फिर आप आसानी से जो चाहते हैं उसे प्राप्त कर सकते हैं।यदि आप आईआईएस होस्टिंग से बंधे हैं तो आपको करना होगा क्योंकि दूसरों ने प्रति अनुरोध सुझाया है और इसे संभाला है।

यदि आईआईएस की आवश्यकता नहीं है तो स्वयं होस्टिंग wcf पर पढ़ें।