C#WCF - 发布者/订阅者模式:在多个表单上显示数据

时间:2010-08-04 09:03:28

标签: wcf

方案

  • 所以我举了一个例子 在WCF中分布式应用程序 实现Observer模式。
  • 我已经将服务器端放入了 Windows服务并添加了一些 类进行一些计算, 我打算通过结果 回到客户端。

解决方案由3个项目组成。

  • 服务器端Windows服务 - 处理所有数据/执行计算。
  • 公共对象类库。
  • 客户端Windows窗体应用程序。

他们使用实现Observer模式的WCF服务连接和交换数据,以允许双向数据交换。

在服务器端:

我有3节课:

  1. 第一类计算X.
  2. 第二类计算Y.
  3. 第三类计算Z。
  4. 然后,通过WCF服务将来自这3个计算的数据发布到客户端。

    在客户端:

    这是TRICKY部分......... ..

    我希望这三个类中的每一个的每组数据都显示在不同表单上的GridControl上。

    所以它将如下:

    1. 将发布X类数据 主要形式。
    2. Y类数据将是 发表于YForm。
    3. Z类数据 将发布到Zform。
    4. 首次运行时,客户端应用程序将仅显示MainForm,但它将包含一个菜单栏以打开Yform和Zform。

      思想:

      • 您认为最好的方法是什么?
      • 我是否将所有数据发布到一个中心类,然后调用绑定到每个不同表单上的网格控件的字典来更新数据?
      • 还是有另一种方式吗?

      感谢帮助。

1 个答案:

答案 0 :(得分:1)

列表中的选项2可以工作,发布到客户端上的中心类,并让其他表单查询此类以获取信息。我建议发布/订阅模式而不是观察者(我假设您将使用双工绑定实现这一点),因为它是一种耦合较少的实现,可以更好地扩展。

这样,服务只会向订阅客户发布信息。

您可以通过在客户端表单上托管WCF响应服务来实现此功能,这样当您的某个计算服务发布结果时,WinForm上托管的服务可以订阅并接收此事件。

如果您需要保持表单打开并实时更新它们,您可以让每个表单都需要数据来托管表单上的服务,并且只需订阅不同的事件。 然后,您可以将(同步上下文)同步到UI线程并实时更新网格,即股票价格更新。

我推荐Juval Lowy的书Programming WCF Services来帮助解释这些概念,并提供发布/订阅的参考实现,在表单和同步上下文中托管服务。