2011-01-02 10 views
8

मैं सिर्फ डब्ल्यूसीएफ के आसपास रस्सियों को सीख रहा हूं। मैं जो करने की योजना बना रहा था, उसके पास नेटटीसीपी बाइंडिंग का उपयोग कर क्लाइंट और सर्वर के बीच एक डुप्लेक्स चैनल खुलता था, और यह अनिश्चित काल तक खुला रहता है ताकि सर्वर क्लाइंट को अनुरोध शुरू कर सके।डब्ल्यूसीएफ - क्या यह लंबे समय तक एक चैनल खोलने के लिए बुरा व्यवहार है?

फिर मैंने इस blog by Jesse Ezell पर ठोकर खाई, जो यह इंगित करता है कि एक चैनल को अनिश्चित काल तक खोलने के लिए एक बुरी बात है, क्योंकि आप दोषों को पकड़ नहीं सकते हैं, और इससे सभी प्रकार की अस्थिरताएं होती हैं।

क्या यह सही है? अगर मैं NetTcp बाइंडिंग का उपयोग करता हूं और रिश्ते के दोनों तरफ एक खुले चैनल का संदर्भ रखता हूं, तो संचार विफलता होने पर क्या होता है? मैं विफलता घटना को कैसे पकड़ूं? क्या अन्य गॉथस हैं? क्या कोई अंतर है जो आप .NET ढांचे का उपयोग कर रहे हैं? (मैं 4.0 पर हूं।)

उत्तर

13

मैं जेसी से सहमत नहीं है (एक पक्ष नोट के रूप में: वह भी सिफारिश की गई है यदि आप डिफ़ॉल्ट है, जो मेरी राय में कभी सबसे खराब विचार है द्वारा एकमात्र के रूप में WCF सेवा वर्गों का उपयोग करें) .....

जब तक आप सर्वर पर अपवादों को पकड़ने की अच्छी देखभाल करते हैं (उदाहरण के लिए आपकी सेवा कक्षा में IErrorHandler इंटरफ़ेस को कार्यान्वित करके), आपके चैनल को बंद रखने के लिए यहां कोई बात नहीं है ... खासकर netTcp बाइंडिंग का उपयोग कर कॉर्पोरेट लैन वातावरण में नहीं।

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

यदि आप अपने सेवा चैनल को लंबे समय तक खोलते रहते हैं, तो आपको दोषों को संभालने के लिए क्लाइंट पक्ष पर सक्षम होना चाहिए - उदा। आपको उस स्थिति से पुनर्प्राप्त करने में सक्षम होना चाहिए जहां चैनल गलती हो गई है, जब सभी के बाद एक अपवाद हुआ है (उदा। नेटवर्क डाउन है या ऐसा कुछ)।

लेकिन यदि आप ऐसा करते हैं, तो मुझे प्रत्येक कॉल के बाद लगातार अपने चैनल को बंद करने में कोई लाभ नहीं दिखता है, और अगले के लिए फिर से खोलना ...

6

हां, जितनी जल्दी इसकी आवश्यकता नहीं है, चैनल को बंद करना अच्छा अभ्यास है। लेकिन डुप्लेक्स संचार के मामले में यह सामान्य नहीं है। जब आप डुप्लेक्स संचार का उपयोग कर रहे हैं तो आपको क्लाइंट को संदेश भेजने की अनुमति देने के लिए खोला गया चैनल चाहिए। डब्ल्यूसीएफ संचार हमेशा ग्राहक द्वारा शुरू किया जाता है। कॉलबैक केवल क्लाइंट द्वारा शुरू किए गए चैनल को रखकर ही अनुमति दी जाती है।

डुप्लेक्स संचार में कनेक्शन विफलताओं को संभालने के लिए कुछ अतिरिक्त कार्य शामिल हैं। ग्राहक को नियमित अंतराल में कनेक्शन की जांच करने के लिए कुछ पिंग तंत्र होना चाहिए। यदि कनेक्शन विफल रहता है क्लाइंट अपवाद प्राप्त करता है और आप कनेक्शन को पुन: स्थापित करने में सक्षम होंगे। दोषपूर्ण चैनल को कॉलबैक संदेश भेजते समय सेवा को अपवाद को संभालना चाहिए।

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