को बंद करता है मुझे कॉलबैक/डुप्लेक्स संचार चैनल बंद करने में समस्याएं/प्रश्न हैं।डब्ल्यूसीएफ कॉलबैक इंटरफेस - चैनल
[ServiceContract(CallbackContract = typeof(IMyInterfaceCallback))]
public interface IMyInterface
{
[OperationContract]
void StartWork();
}
public interface IMyInterfaceCallback
{
[OperationContract(IsOneWay = true)]
void WorkFeedback();
}
ग्राहक के पक्ष मैं के माध्यम से मेरी WCF इंटरफ़ेस बनाने पर:: यहाँ मेरी प्रोटोटाइप WCF इंटरफ़ेस हैं
DuplexChannelFactory<IMyInterface> dcf = new DuplexChannelFactory<IMyInterface>(implOfIMyInterfaceCallback, customBinding, ea);
IMyInterface myInterface = dcf.CreateChannel();
सर्वर साइड पर मैं तो
OperationContext.Current.GetCallbackChannel<IMyInterfaceCallback>();
का उपयोग पुनः प्राप्त करने के कॉलबैक पॉइंटर, जिसका उपयोग तब क्लाइंट के साथ संवाद करने के लिए किया जा सकता है।
मेरे सवालों का अब कर रहे हैं:
- कौन संचार चैनल बंद हो जाना चाहिए? क्लाइंट या सर्वर
- कौन सी संचार वस्तुओं को बंद करने की आवश्यकता है? मूल इंटरफ़ेस (IMyInterface) या कॉलबैक इंटरफ़ेस (IMyInterfaceCallback) या दोनों।
मैंने सर्वर पक्ष पर कॉलबैक इंटरफ़ेस को बंद करने का प्रयास किया, उस समय जब सर्वर जानता है कि यह और कॉलबैक नहीं करेगा। ICommunicationObject का उपयोग करना :: कॉलबैक इंटरफ़ेस पर बंद करें हालांकि परिणामस्वरूप एक मिनट का अवरोधन ऑपरेशन हुआ।
मेरी राय में ग्राहक पक्ष पर बंद करना सही तरीका नहीं है, क्योंकि क्लाइंट को यह नहीं पता है कि अधिक कॉलबैक होने की उम्मीद है या नहीं।
किसी भी मदद के लिए धन्यवाद। फ्रैंक
पुनश्च: यह एक बहुत ही बुनियादी सवाल हो रहा है, लेकिन अब तक मैं जब गूगल के माध्यम से या stackoverflow में खोज रहा है ...
जानकारी के लिए धन्यवाद, अब मैं ग्राहक पक्ष पर चैनल बंद कर रहा हूं और सब कुछ ठीक है। हालांकि मैं बंद होने से पहले राज्य की जांच कर रहा हूं, उदाहरण के लिए अगर फॉल्ट हो तो सीधे एबॉर्ट() को कॉल करें। लेकिन आपका समापन कोड भी ठीक काम करना चाहिए। – FrankE