मैंने अपने कोड में डब्ल्यूसीएफ कॉलबैक पैटर्न सफलतापूर्वक कार्यान्वित किया है और अब मैं एक एसिंक्रोनस कॉलबैक को कार्यान्वित करना चाहता हूं।डब्ल्यूसीएफ एसिंक्रोनस कॉलबैक
DuplexChannelFactory<IMessage> dcf = new DuplexChannelFactory<IMessage>(new InstanceContext(this), "WSDualHttpBinding_IMessage");
<endpoint address="net.tcp://localhost:8731/Message/"
binding="netTcpBinding"
contract="WCFCallbacks.IMessage" name="WSDualHttpBinding_IMessage">
मैं मुसीबत अतुल्यकालिक उपयोग करने के लिए अंत बिंदु और चैनल का सही संयोजन हो रही हो रहा है:
[ServiceContract(Name = "IMessageCallback")]
public interface IMessageCallback
{
[OperationContract(IsOneWay = true)]
void OnMessageAdded(string message, DateTime timestamp);
}
[ServiceContract(Name="IMessageCallback")]
public interface IAsyncMessageCallback
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginOnMessageAdded(string msg, DateTime timestamp, AsyncCallback callback, object asyncState);
void EndOnMessageAdded(IAsyncResult result);
}
[ServiceContract(CallbackContract = typeof(IMessageCallback))]
public interface IMessage
{
[OperationContract]
void AddMessage(string message);
}
तुल्यकालिक कॉलबैक मैं तो जैसे मेरे चैनल और अंत बिंदु घोषित उपयोग करने के लिए: यहाँ मेरी इंटरफ़ेस कोड है वापस कॉल करें। क्या कोई मुझे सही दिशा दिखा सकता है?
इसके अलावा कोड की निम्न पंक्ति निष्पादित किया जाता है जब:
निम्न त्रुटिOperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
मैं हो:
Unable to cast transparent proxy to type 'WCFCallbacks.IAsyncMessageCallback'
फिगेरिया - प्रतिक्रिया के लिए धन्यवाद लेकिन जब मैं अपने ग्राहकों को एक अलग धागे पर डालता हूं और AddMessage को कॉल करता हूं तो इसे BeginInvoke कहा जाता है। – user481779
क्या आप अपनी सेवा पर एकाधिक (या पुनर्वित्त) को समवर्ती मोड सेट कर रहे हैं? आप क्लाइंट पर समवर्ती मोड सेट करने के लिए कॉलबैक क्लास (MyClientCallback में पोस्ट किए गए उदाहरण में) में [CallbackBehavior] भी जोड़ सकते हैं। यह देखने के लिए कि आप जो देख रहे हैं वह एक डेडलॉक है, इसे एकाधिक पर सेट करने का प्रयास करें। – carlosfigueira
मैंने इसे सफलतापूर्वक बिना किसी भी तरह से करने की कोशिश की। मुझे और स्पष्ट होना चाहिए कि मेरे आर्किटेक्चर में मेरे पास कई क्लाइंट की सेवा करने वाली सेवा है। ग्राहक सेवा साइड फ़ंक्शन AddMessage को कॉल करते हैं और सेवा ऑनमेसेज फ़ंक्शन पर क्लाइंट (उम्मीदपूर्वक असीमित रूप से) को कॉलबैक कर सकती है। तो AddMessage को क्लाइंट साइड पर सेवा-पक्ष और OnMessage में लागू किया गया है। – user481779