WCF异步回调
我已经在代码中成功实现了 WCF 回调模式,现在我想实现异步回调。这是我的接口代码:
[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);
}
为了使用同步回调,我声明了我的通道和端点,如下所示:
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">
我无法获得端点和通道的正确组合来利用异步回调。有人能指出我正确的方向吗?
另外,当执行以下代码行时:
OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
我收到以下错误:
Unable to cast transparent proxy to type 'WCFCallbacks.IAsyncMessageCallback'
I have successfully implemented the WCF callback pattern in my code and now I want to implement an asynchronous callback. Here is my interface code:
[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);
}
To use the synchronous callback I declared my channel and endpoint like so:
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">
I am having trouble getting the right combination of endpoint and channel to utilize the asynchronous callback. Can someone point me in the right direction?
In addition when the following line of code is executed:
OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
I get the following error:
Unable to cast transparent proxy to type 'WCFCallbacks.IAsyncMessageCallback'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要将服务协定 IMessage 的 CallbackContract 属性更改为该类型 (IAsyncMessageCallback)。下面的示例使用异步回调运行。
You need to change the CallbackContract property of the service contract IMessage to that type (IAsyncMessageCallback). The example below runs with the async callback.