使用WCF(或其他解决方案)实现安全双工通信的最佳方法

时间:2012-04-19 08:23:10

标签: c# wcf nservicebus duplex

我需要允许多个客户端(winforms应用程序)通过互联网(在远程位置)连接到服务器,并启动双工通信,有时会发送大量流量。

目前我们通过netTcpBinding与WCF使用双工通信,使用我们自己的证书在传输层上进行保护。虽然这有效,但我关注的是很多事情:

  • 设置很痛苦 - 我们为每个客户端创建一个证书,以便与服务器一起识别,并需要在客户端计算机和服务器上为每个客户端注册证书
  • 因为我们在特定端口上使用tcp,所以我们依赖于在客户端打开的那部分,以便它可以通过tcp启动通信。有些客户位置不喜欢这样。
  • 我们需要能够保证理想的交付

作为替代方案,我想知道如何使用wsDualHttpBinding,使用单个SSL证书来保护它,并让每个客户端发送某种标识符来标识自己。这会解决防火墙问题,并且它会比http而不是tcp足够高效吗?据我所知,如果你使用http(因为http不支持双向通信),WCF将创建2个频道而不是一个 - 所以听起来它可能会导致一些性能问题。

我的问题是,这个解决方案是否更好,或者是否有其他解决方案(例如NServiceBus)可以使这更容易并解决这些问题?

修改

我已经知道wsDualHttpBinding对我来说不是一个选项,因为:This binding requires that the client has a public URI that provides a callback endpoint for the service。这对我来说是不可能的。

1 个答案:

答案 0 :(得分:6)

让我分别解决每个问题:

  1. 为什么不使用TransportWithMessageCredential并使用用户名和 密码 - 这意味着您只需要管理用户名和 客户端的密码和客户端证书问题消失了

  2. 使用NetTcpBinding,服务器需要打开入站端口 流量 - 客户端只需要允许客户端连接到该流量 端口,他们不需要允许您的入站连接 具体端口。他们是否有允许出站的问题 连接到您的自定义端口?

  3. NetTcpBinding使用Tcp,假设您有保证交付 在拓扑中没有SOAP中介。你想要吗? 保证交货或加工?

  4. WSDualHttpBinding将强制您的客户端为入站连接打开一个端口,因此几乎肯定不会被接受。我前后写了一篇关于双工的blog article,这可能有助于澄清问题

    您还可以查看针对此类场景设计的SignalR,虽然专为Web应用程序设计也有.NET客户端