हमारा आवेदन दो प्रक्रियाओं के बीच संवाद करने के लिए नामित पाइपों पर डब्ल्यूसीएफ का उपयोग करता है (नोट: न तो प्रक्रिया एक विंडोज सेवा है।) हमारा आवेदन दो साल से बिना किसी घटना के मैदान में चल रहा है।तृतीय पक्ष ऐप हमारे डब्ल्यूसीएफ आवेदन को तोड़ता है
अब हम रिपोर्ट प्राप्त कर रहे हैं कि किसी तृतीय पक्ष एप्लिकेशन (विशेष रूप से, गार्मिन एक्सप्रेस) की उपस्थिति हमारी तोड़ रही है। मैंने घर में गार्मिन एक्सप्रेस स्थापित किया है और व्यवहार की पुष्टि की है। विशेष रूप से "गार्मिन कोर अपडेट सर्विस" चलते समय, हमारे एप्लिकेशन को असफल होने का कारण बनता है।
जब गार्मिन सेवा चल रही है, तो हमारे आवेदन की "सेवा" पक्ष शुरू होती है और डब्ल्यूसीएफ एंडपॉइंट बनाने में कोई समस्या नहीं होती है। लेकिन जब ग्राहक शुरू होता है और सेवा से कनेक्ट करने का प्रयास करता है, तो यह EndpointNotFoundException के साथ विफल रहता है, जैसे कि सेवा भी नहीं चल रही है।
इस बिंदु पर, मैं सचमुच सेवा नियंत्रण कक्ष से गार्मिन सेवा को रोक सकता हूं, फिर क्लाइंट को अपनी सेवा को पुनरारंभ किए बिना सफलतापूर्वक फिर से चला सकता हूं। अगर मैं फिर से गार्मिन सेवा शुरू करता हूं, तो क्लाइंट शुरू करने के लिए और प्रयास विफल हो जाते हैं। तो यह कम से कम साबित करता है कि हमारी डब्ल्यूसीएफ सेवा पूरी हो रही है और पूरे समय चल रही है, और गार्मिन सॉफ्टवेयर किसी भी तरह से हमारे क्लाइंट की कनेक्ट करने की क्षमता को अवरुद्ध कर रहा है।
हम एंडपॉइंट पते के लिए अपना नाम उपयोग कर रहे हैं (उदाहरण के लिए "net.pipe: // localhost/MyPrivateAplication" जैसे कुछ)। मैंने इस पते को कई अन्य नामों में बदलने की कोशिश की है, लेकिन इस मुद्दे पर इसका कोई प्रभाव नहीं पड़ता है।
डब्ल्यूसीएफ का उपयोग करने के लिए हमारे अपने आवेदन की क्षमता को तोड़कर, एक और आवेदन कैसे चला सकता है?
अद्यतन: अनुरोध करके, यहां सेवा पक्ष से एक कोड स्निपेट है। मैंने इस मुद्दे को अलग करने के प्रयास में इसे हमारे मूल कोड से सरल बना दिया है। अब तक, मेरे द्वारा किए गए एक भी बदलाव से इस मुद्दे पर कोई असर नहीं पड़ा है। अपने प्रश्न का
MyService service = new MyService();
ServiceHost host = new ServiceHost(service);
string hostAddress = new Uri("net.pipe://localhost/MyWCFConnection");
host.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), hostAddress);
host.Open();
आपकी सेवा कैसे अपना सेवा यूआरएल निर्दिष्ट करती है? क्या यह आधार + सापेक्ष पता या एक बहिष्कार पता है? हो सकता है कि आप कोड/कॉन्फ़िगरेशन से निष्कर्ष पोस्ट कर सकें कि आपकी सेवा समाप्ति बिंदु कैसे स्थापित की गई है। –
मैंने अपनी पोस्ट को कोड स्निपेट के साथ अपडेट किया है। मुझे पूरा यकीन है कि यह एक पूर्ण पता है, सही? दोबारा, यह सेवा-साइड कोड सफलतापूर्वक निष्पादित करता है कि गार्मिन सेवा चल रही है या नहीं। केवल ग्राहक पक्ष प्रभावित है। – ObjetDart
हां, यह एक पूर्ण पता है, इसलिए मेरे पहले सुझाव से कुछ और सूक्ष्म चल रहा है। –