有没有办法在WCF中通过单个TCP连接进行TRUE双向通信?

时间:2009-12-02 16:20:58

标签: .net wcf tcp

我有一个WCF服务器,它暴露了一个接口,该接口有一个用于向客户端发送事件的回调接口。

我宁愿不将回调接口上的所有方法标记为“OneWay”,因为它会使错误跟踪和记录更加困难。

客户端是用WinForms编写的,因此在调用服务器返回之前,回调将不会是进程。 (这是我想要的行为)

我使用Asynchronous Eg进行所有回调。 BeginMyMethod(...),因此服务器不会被阻止等待客户端。

但是,如果将回叫发送到向服务器发送请求的同一客户端,则TCP通道会自行死锁,因为它似乎无法将响应发送回客户端,客户端已通过同一信道将回叫响应发送回服务器。

有没有办法在WCF中通过单个TCP连接进行真正的双向通信?

1 个答案:

答案 0 :(得分:0)

如果服务器和客户端同时作为服务器和客户端(如果可以理解的话),则可以执行此操作

它会像这样工作:

  • 当客户端启动时,它会调用服务器并自行注册
  • 然后,服务器知道客户端在哪里,并可以通过客户端公开的服务联系客户端。

另一个更简单的解决方案是不重用chanel,从而避免死锁。