与WCF的双向通信 - 我应该使用回调,还是只使用两个通道?

时间:2009-08-26 10:57:31

标签: .net wcf

我正在尝试确定在同一服务器或LAN上运行的两个.Net进程之间处理全双工通信的最合适方式是什么。我们有两个进程需要能够相互调用方法。

目前,我们正在使用带有NamedPipe或Tcp通道的WCF,并将ProcessA注册到ProcessB。我们的WCF契约指定了一个Callback接口,因此ProcessB可以在ProcessA上调用方法。

我的问题是以下哪项更有意义,更简单,更强大?

  1. 让ProcessB使用Callback接口(由WCF支持)来调用ProcessA中的方法。
  2. 在注册期间,ProcessA是否已通过ProcessB传递ProcessB使用新渠道注册ProcessA所需的信息?
  3. 我不完全了解回调代理和线程问题的生命周期。我已经看过各种关于回调方法阻塞的帖子。

2 个答案:

答案 0 :(得分:3)

您的选项2基本上只是对WCF在选项1中为您所做的事情的描述。

当您的客户端打开连接时,它会向服务注册回调通道。此通道保持打开状态,直到您关闭它 - 通过显式调用Close或通过处理它。

因此,在您所描述的场景中,听起来您应该继续使用回调合约。这就是它们的用途。

答案 1 :(得分:1)

选项2确实描述了选项1的作用,但它实现了您自己无法做到的方法。例如,如果您使用TCP通道,它将使用客户端打开到服务器的Socket来重新发送数据。

这意味着它将在防火墙和NAT后面工作。

结帐

http://diagonaltechblog.blogspot.com/2009/12/wcf-duplex-channels-firewalls-and-nats.html

它没有详细介绍如何创建双工频道,但听起来你已经管理了那么多。

干杯