2010-01-03 17 views
7

मेरे पास डब्ल्यूसीएफ सेवा और ग्राहक है। मैं के माध्यम सेडब्ल्यूसीएफ कनेक्शन की जांच करें

ChannelFactoryBase < WCF से कनेक्ट .. ::। CreateChannel विधि

तब मैं ICommunicationObject

के लिए एक संदर्भ है

WCF सेवा ( < (TChannel>)> का) बाद में कनेक्ट या बंद होने पर काम नहीं कर रहा है। डब्ल्यूसीएफ सेवा काम कर रही है या नहीं, यह जांचने के लिए सही तरीका क्या है। CommunicationException तंत्र का उपयोग करने का एक सीधा तरीका है। लेकिन ICommunicationObject.State संपत्ति के बारे में क्या? क्या मुझे यह जांचना चाहिए कि क्या यह किसी भी डब्ल्यूसीएफ विधि कॉल से पहले दोषपूर्ण स्थिति में है? सबसे अच्छा अभ्यास क्या है?

+0

उपयोगकर्ता @Stix, प्रति [MSDN] (https://msdn.microsoft.com/en-us/library/ms733912 (v = vs.110) .aspx से): ICommunicationObject.State प्रॉपर्टी का मान जांचना एक दौड़ की स्थिति है और यह निर्धारित करने की अनुशंसा नहीं की जाती है कि चैनल का पुन: उपयोग या बंद करना है या नहीं। –

उत्तर

13

यह जांचने के लिए कोई जादूगर तरीका नहीं है कि डब्ल्यूसीएफ सेवा काम कर रही है या नहीं - इसे कॉल करने के अलावा और अगर यह काम नहीं कर रहा है तो अपवादों को संभालने के लिए तैयार किया जा रहा है।

ICommunicationObject.State केवल आपको बताएगा कि क्लाइंट और सर्वर के बीच एक चैनल "गलती" है, अगर पिछले ऑपरेशन में कोई त्रुटि हुई और वह त्रुटि सर्वर पर ठीक तरह से संभाली नहीं गई थी (और इस प्रकार चैनल को "दोषपूर्ण" ", उदाहरण के लिए बेकार rendered)।

आप कर सकते हैं - यदि आप तार के दोनों सिरों को नियंत्रित करते हैं - इसमें पहले से कुछ कॉल करने में सक्षम होने के लिए "डमी" पिंग विधि (या सेवा की संस्करण संख्या लौटने जैसी कुछ चीज़) शामिल है, तो बस देखें कि क्या संचार चैनल अभी भी जीवित है।

लेकिन तब: पहला MyService.Ping() बुला और अगर सेवा जिंदा नहीं है संभव अपवाद को संभालने के लिए हो रही है, और फिर अपने वास्तविक विधि बुला के बजाय सिर्फ MyService.MyMethod() बुला और किसी भी प्रासंगिक अपवाद को संभालने के वास्तविक लाभ क्या है?

+0

धन्यवाद, मुझे आश्चर्य है कि ICOMunicationObject.Faulted ईवेंट और ICommunicationObject.State संपत्ति क्यों है? अगर मैं उन्हें किसी भी तरह –

+0

का उपयोग कर सकता हूं तो "फॉल्ट" ईवेंट को किसी चैनल को गलती के बारे में अधिसूचित करने के लिए संभाला जा सकता है, उदाहरण के लिए उदाहरण के लिए, आप प्रॉक्सी फिर से बना सकते हैं। राज्य में सिर्फ "फॉल्ट" राज्य से अधिक है, लेकिन यह कोई संकेत नहीं देता है कि सेवा "जिंदा" है या नहीं। –

+1

Proxy.Open() को कॉल करने के बारे में कैसे? –

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