Использовать WCF для трансляции / уведомления другого объекта? - PullRequest
1 голос
/ 21 октября 2011

Просто ... выполняю некоторые практики.

Структура:

Клиентское приложение WPF и серверное приложение WPF, оба из которых самостоятельно размещают службу WCF.

Клиент WPF содержит представление, которое содержит ListBox

Что я хочу сделать:

  1. Сервер WPF создастканалы в WCF Клиента и постоянно отправлять сообщение.

  2. WCF Клиента будет получать сообщение и отправлять сообщения всем классам, которые его подписывают.(Или, может быть, я скажу классы, которые его наблюдают).

  3. В этом случае представление клиента должно получить сообщение и поместить его в список.

Проблемы:

Итак, проблема в том, как я могу позволить View наблюдать WCF?Или получить уведомление от WCF?

WCF клиента создается с помощью ServiceHost myHost = new ServiceHost (typeof (MyClient));

Как разрешить WCF ссылаться на представление моего клиентаи сделать уведомление?

Throught:

  1. Каким-то образом жестко закодировать WCF клиента, чтобы иметь ссылку View внутри (это ... неимеет смысл)

  2. Шаблон наблюдателя?Создайте статический класс Subject, который реализует интерфейс WCF клиента.По желанию Клиента все методы обращаются к предметному классу.Представление также реализует клиентский интерфейс WCF и присоединяется к предметному классу.Наконец, Subject класс будет маршрутизировать вызовы ко всем представлениям ....

Примерно так:

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 просто уведомить класс субъекта об обновлении, тогда View просто получит уведомление и создаст канал для сервера, чтобы получить свои собственные данные .....

Все вышеперечисленные опции doens 'это действительно звучит хорошо ... и вариант 2 Я даже не знаю, если это больше паттерны наблюдателей ...

Интересно, что будет лучшим способом сделать это?

1 Ответ

0 голосов
/ 21 октября 2011

Пожалуйста, посмотрите шаблон EventAggregator, чтобы добиться того, что вы пытаетесь.Реализация EvenAggregator доступна в

  1. MVVM Light
  2. Microsoft PRISM
  3. Caliburn.Micro

См. Пример использования EventAggregator здесь
Вам не нужно использовать полную платформу, упомянутую здесь, вы можете извлечь класс EventAggregator и использовать его.

...