1

I'm a WCF newbie, and I need some help to begin with a project:

I will have a managed application (server) that needs to communicate (messaging system) with several clients over the internet and vice versa.

What is the best approach to achieve this? using wsDualBinding?

UPDATE

I decided to use the NetTcpBinding mode instead.

4

2 回答 2

3

这取决于您的服务需要公开哪些功能,以及您需要支持什么类型的客户端。任何基于 HTTP 的绑定都可以在 Internet 上运行,这只是数据编码方式的问题。

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

但最常见的是:

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

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

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

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

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

  1. 执行轮询客户端选项,在服务器上使用简单的 BasicHttpBinding 并不断请求新消息。
  2. 将您的客户端应用程序设置为自托管本地 WCF 服务,并在您登录时向服务器提供端点信息。这需要您的客户端接受传入的连接,这会变得混乱(但如果您可以将其关闭,我d 在这里进行 NetTcpBinding。)
于 2012-06-03T12:42:25.973 回答
1

WSDualHttpBinding不是上网的好选择。回调仅在没有防火墙和 NAS 限制的本地网络(内联网)中有效。

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

使用 wsDualHttpBinding 通过 Internet 连接到 WCF 服务超时

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

WebHttpBinding如果您打算使用来自 Javascript 的数据,请使用。

于 2012-06-03T20:29:51.253 回答