【发布时间】:2017-03-09 09:40:53
【问题描述】:
我有这个问题。我有两个 WCF 服务 - ServiceA 和 ServiceB。这两个服务都托管在不同的 Windows 服务中,并通过 net.tcp 进行通信。客户端访问Service A。在Service A 中,我访问Service B。我遇到的问题是我想要双工通信。
那是我希望客户在ServiceA 中调用方法TestA。此方法将在ServiceB 中调用方法TestB。方法TestB 将进行一些长时间的操作,然后将回调引发回ServiceA,这将引发对客户端的回调。方法TestA和TestB是单向契约。
我可以达到ServiceA 向客户端发起回调的地步。然后它在 InvalidCastException 尝试在操作上下文中获取回调通道时崩溃。
IServiceACallback Callback
{
get
{
return OperationContext.Current.GetCallbackChannel<IServiceACallback>();
}
}
是不是因为我在不同的线程中并且操作上下文根本不完整?因为当我不从ServiceB 的另一个回调中执行回调时,我可以将回调返回给客户端。我可以用一些服务属性解决它吗?或者有什么我可以使用的交流模式?
【问题讨论】:
-
架构应该可以工作。当您收到部分消息时,通常会发生像您这样的异常。确保接收代码清楚地知道每条消息的结尾。尝试读取的数据多于输入缓冲区中存在的数据将导致下溢并产生异常。
-
你的意思是invalidCastException吗?
-
是的,它是 InvalidCastException
-
一定和 OperationContext 生命周期有关
标签: c# wcf message-passing duplex