使用WCF广播/通知不同的对象?

时间:2011-10-21 03:57:07

标签: c# wpf wcf

只是......做一些练习。

结构:

客户端WPF应用程序和服务器WPF应用程序,它们都是自托管WCF服务。

客户端WPF包含一个View,其中包含ListBox

我想做什么:

  1. 服务器WPF将为客户端的WCF创建频道并不断发送消息。

  2. 客户的WCF将收到订阅它的任何类的消息和电影广播。 (或许我会说观察它的课程。)

  3. 在这种情况下,客户的视图应该收到消息并放入列表框。

  4. 问题:

    所以问题是如何让View观察WCF?或者通过WCF获得通知?

    客户端的WCF是使用ServiceHost创建的myHost = new ServiceHost(typeof(MyClient));

    如何让WCF引用我的客户视图并进行通知?

    Throught:

    1. 以某种方式硬编码客户端的WCF以在内部使用View引用(这......没有意义)

    2. 观察者模式?创建一个静态Subject类,实现Client的WCF接口。 在Client的will路由器中,所有方法都调用Subject类。 View还将实现客户端的WCF接口并附加到Subject类。最后,Subject类将路由器调用所有视图....

    3. 这样的事情:

      public class ClientServiceObserver : IClient
      {
          static List<IClient> _observers = new List<IClient>();
      
          public static void Attach(IClient client)
          {
              _observers.Add(client);
          }
      
          public static void Detach(IClient client)
          {
              _observers.Remove(client);
          }
      
          public void SendCallbackMessage(string message)
          {
              foreach (IClient client in _observers)
              {
                  client.SendCallbackMessage(message);
              }
          }
      }
      

      3.类似于选项2的所有内容,但不是路由器所有呼叫到处都是,不妨让WCF只通知Subject类有更新,然后View将获取通知并创建通道到服务器以获取它自己的数据。 ...

      以上所有选项都听起来不太好......而选项2我甚至不知道这是否是观察者模式....

      我想知道最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

请查看EventAggregator模式以实现您的目标。

中提供了EvenAggregator实现
  1. MVVM Light
  2. Microsoft PRISM
  3. Caliburn.Micro
  4. 请参阅使用EventAggregator here的示例
    你不需要使用这里提到的完整框架,你可以拔出EventAggregator类并使用它。