3

如上所示,我试图实现相同的目标。详细地 :

  1. 我在公共 IP 和具有 Internet 访问权限的 WCF 客户端上有 WCF 服务

    中央服务:它应该检查中央节点的任何价格变化并将其通知给 WCF 客户端。

    客户端服务:根据中央服务的通知,客户端将执行从服务器拉取数据并确认相同的返回。

  2. 首先,我希望我的中央服务了解客户端并向客户端发送通知,我的问题是如何查看它们(WCF 客户端)?即使作为订阅者列出我应该通知 WCF 客户端的客户端的哪些数据。

  3. 其次,客户端需要在完成特定任务时更新服务器。

此外,我正在寻找有关模式建议或有关如何实现相同目标的任何想法的回答者。任何链接将不胜感激。

谢谢

4

1 回答 1

3

首先,我希望我的中央服务了解客户端并向客户端发送通知,我的问题是如何查看它们(WCF 客户端)?即使作为订阅者列出我应该通知 WCF 客户端的客户端的哪些数据。

看起来你想实现一个发布者 - 订阅者架构,你通过回调实现你列出的要求。实现此目的的标准方法是让您的客户订阅您的中央服务。订阅后,您的中央服务将在字典中保留已连接客户端的列表(您将客户端表示为回调实例)(这是一种方式,静态列表是另一种方式)。例如:

static Dictionary<INotificationCallback, string> subscribers = new Dictionary<INotificationCallback, string>();

当客户端订阅您的服务时,您可以将每个回调实例添加到您的订阅者字典中(您实际上将连接到您的服务的回调客户端的每个实例与其用户名一起存储,即字典中的字符串 vlaue)。

您的中央服务还需要定义一个回调合约(这里我们的回调合约是INotificationCallback),以便它可以在连接到它的客户端上调用一些操作。这将允许您的中央服务向客户发送它想要的任何数据,即每当价格发生变化时。

其次,客户端需要在完成特定任务时更新服务器。

只需在您的中央服务上定义另一个操作合同,您的客户将在成功完成任务时调用该合同。如何跟踪已完成的任务以及如何跟踪它们完全取决于您。

最近有人问了一个类似的问题,我想如果你看看我的回答,你会发现它很有帮助。另外,当我想学习 WCF 中的 pub-sub 模式和双工通信时,我发现这篇文章很有帮助。但是,如果您希望通过 Internet 执行此操作,则不应使用,而应使用支持双工的基于 HTTP 的绑定,netTcpBinding例如Silverlight 客户端。wsDualHttpBindingHttpPollingDuplex

更新:根据您的要求提供一些更有用的文章/示例:

  1. 设计模式:基于列表的发布-订阅
  2. 发布者/订阅者模型的 WCF 实现
  3. 一个 WCF-WPF 聊天应用程序

最后一个是聊天应用程序,它本质上使用双工,这是一种与您正在寻找的服务架构非常相似的服务架构。

于 2012-07-27T14:40:29.217 回答