WCF通过互联网进行通信

时间:2012-06-03 11:56:44

标签: wcf

我是一名WCF新手,我需要一些帮助才能开始一个项目:

我将拥有一个托管应用程序(服务器),需要通过互联网与多个客户端进行通信(消息系统),反之亦然。

实现这一目标的最佳方法是什么? 使用wsDualBinding?

更新

我决定使用NetTcpBinding模式。

2 个答案:

答案 0 :(得分:3)

这取决于您的服务需要展示哪些功能,以及您需要支持哪种类型的客户端。任何基于HTTP的绑定都可以在互联网上运行,它只是数据编码方式的问题。

可以在此处找到内置绑定及其支持内容的摘要:http://msdn.microsoft.com/en-us/library/ms731092.aspx

但最常见的是:

  • BasicHttpBinding - 这是一个基本的Web服务样式绑定,可供任何SOAP客户端使用。
  • WebHttpBinding - 这允许您的服务由非SOAP HTTP客户端使用
  • WsHttpBinding - 这允许您的服务使用交易和会话等扩展服务功能。
  • WsDualHttpBinding - 如果您的服务需要双工频道,则需要这样做,这意味着您的服务需要回调客户端。

由于您特别询问了双重绑定:

如果您正在编写一个需要能够从服务器回调到客户端的应用程序,那么双重绑定实际上是您唯一的选择。但是,由于您特别提到了聊天,我认为双通道服务不会很好用。

回调在WCF中的工作方式是您的客户端使用双通道调用服务,并且必须提供回调接口的实现。服务器可以使用它在服务方法调用期间调用客户端 ;回调上下文是按服务调用的,因此一旦该调用返回,它就不再有效。换句话说,您的服务器不能只是异步“调用”您的客户端,它必须等待客户端“轮询”服务器。如果你打算这样做,你就不再需要回调了。

老实说,我认为我不会将WCF用于交互式双向聊天应用程序,但我可以考虑两种可能的选择:

  1. 使用服务器上的简单BasicHttpBinding执行轮询客户端选项,并不断询问新消息。
  2. 将您的客户端应用程序设置为自托管本地WCF服务,并在您登录时向服务器提供端点信息。这要求您的客户端接受传入的连接,这会变得混乱(但是如果您可以将其关闭,我会在这里找一个NetTcpBinding。)

答案 1 :(得分:1)

WSDualHttpBinding不是互联网的好选择。回调仅适用于没有防火墙和NAS限制的本地网络(内部网)。

有关详细信息,请参阅此帖:

Connecting over internet to WCF service using wsDualHttpBinding times out

如果要设置服务器到服务器的通信(应该适用于WPF),请使用WsHttpBinding

如果您打算使用Javascript中的数据,请使用WebHttpBinding