मैं डब्ल्यूसीएफ का उपयोग कर नेट 3.5 में क्लाइंट/सर्वर एप्लिकेशन विकसित कर रहा हूं। असल में, एक लंबी चल रही ग्राहक सेवा (कई मशीनों पर) नेटटीसीपी बाइंडिंग पर सर्वर से डुप्लेक्स कनेक्शन स्थापित करती है। सर्वर तब क्लाइंट के कॉलबैक अनुबंध का उपयोग कुछ ऑन-डिमांड ओपेरेशंस करने के लिए करता है, जिस पर क्लाइंट एसिंक्रोनस फैशन (काफी मानक सामान मुझे लगता है) में प्रतिक्रिया देता है। मैं अधिकांश संचार को संभालने के लिए डुप्लेक्स क्लाइंटबेस क्लास को उप-वर्गीकृत करता हूं।यदि यह गलती हो जाती है तो मैं स्वचालित रूप से एक डुप्लेक्स चैनल को फिर से स्थापित कैसे करूं?
दुर्भाग्य से, जब कुछ दोनों छोर पर गलत हो जाता है (इस तरह के एक नेटवर्क विफलता, अनपेक्षित अपवाद, आदि), चैनल गर्भपात गलती हो जाता है/और बाद के सभी कार्रवाई विफल। मैं इस सीमा को गैर-डुप्लेक्स चैनलों में एक रिकवरिंग क्लाइंटबेस क्लास बनाकर प्राप्त कर चुका हूं जो क्लाइंट ने गलती की है और ऑपरेशन को फिर से चालू करते समय स्वचालित रूप से उठाया है।
तो मेरे सवाल है, वहाँ जब एक डुप्लेक्स चैनल गलती है का निर्धारण करने का एक स्थापित तरीका है? सर्वर या क्लाइंट पर मुझे यह कहां से जांचना चाहिए? यह विफल होने के कारण, मुझे यह सुनिश्चित करने के लिए क्या विकल्प हैं कि कनेक्शन फिर से स्थापित हो जाए?
अद्यतन: मैं कुछ सलाह द्वैध चैनल, जहां सर्वर एक कॉलबैक चैनल कि गलती किया गया था उपयोग करने के लिए कोशिश कर सकते हैं के लिए विशिष्ट की तलाश में हूँ। इस प्रकार, मुझे कुछ ऐसा चाहिए जो चैनल से कुछ घटित होने पर तुरंत पुनः कनेक्ट/पुनः सदस्यता ले लेगा। फिलहाल मैं चैनल के समापन कार्यक्रम को सुन रहा हूं और अगर राज्य कुछ भी बंद है तो इसे पुनर्निर्माण कर रहा हूं। यह एक तरह से काम करता है, लेकिन यह hacky लगता है ...
क्या आप शायद इसका एक उदाहरण प्रदान कर सकते हैं? लेख सिर्फ विचार को सुझाता है, लेकिन कार्यान्वयन के लिए कोई संकेत नहीं देता है। – Jacob
+1 जैकब। क्या किसी को यह काम करने के बारे में कोई जानकारी मिली है? मुझे वर्तमान में अपने पुन: कनेक्शन व्यवहार को लागू करने के लिए महल गतिशील प्रॉक्सी का उपयोग करना पड़ा है, लेकिन मैं इस व्यवहार को डब्ल्यूसीएफ के माध्यम से जोड़ना चाहता हूं। मैं विभिन्न डब्ल्यूसीएफ ब्लॉग पढ़ रहा हूं लेकिन यह अभेद्य है और मेरे पास कोई संकेत नहीं है कि कहां से शुरू किया जाए - यहां तक कि सरल एक्सटेंशन को वर्गों और कॉन्फ़िगरेशन के रीम्स के लोड की आवश्यकता होती है - यह परेशान है। –
अपनी सेवा पर स्पष्ट ICommunicationObject इंटरफ़ेस के माध्यम से फ़ॉल्ट किए गए ईवेंट में इवेंट हैंडलर जोड़ें। घटना हैंडलर में, Abort() चैनल और एक नया चैनल बनाएँ। – Jakub