2012-06-03 56 views
1

我是一个WCF新手,我需要一些帮助来开始一个项目:WCF通信在互联网上

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

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

UPDATE

我决定使用NetTcpBinding的模式,而不是。

回答

1

WSDualHttpBinding不适合上网。只有在没有防火墙和NAS限制的本地网络(内部网)中回叫才有效。

详情请参见这篇文章:

Connecting over internet to WCF service using wsDualHttpBinding times out

使用WsHttpBinding如果要设置服务器到服务器的通信(应为WPF工作)。

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

+0

谢谢,在阅读了很多内容之后,我专门使用了NetTcpBinding模式。 –

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。)
+0

我意识到可能的选择,我的问题是要知道wsdualhhp结合是否是“聊天”系统的最佳解决方案。服务器应用程序和客户端应用程序都是用WPF构建的。 –