Просто ... выполняю некоторые практики.
Структура:
Клиентское приложение WPF и серверное приложение WPF, оба из которых самостоятельно размещают службу WCF.
Клиент WPF содержит представление, которое содержит ListBox
Что я хочу сделать:
Сервер WPF создастканалы в WCF Клиента и постоянно отправлять сообщение.
WCF Клиента будет получать сообщение и отправлять сообщения всем классам, которые его подписывают.(Или, может быть, я скажу классы, которые его наблюдают).
В этом случае представление клиента должно получить сообщение и поместить его в список.
Проблемы:
Итак, проблема в том, как я могу позволить View наблюдать WCF?Или получить уведомление от WCF?
WCF клиента создается с помощью ServiceHost myHost = new ServiceHost (typeof (MyClient));
Как разрешить WCF ссылаться на представление моего клиентаи сделать уведомление?
Throught:
Каким-то образом жестко закодировать WCF клиента, чтобы иметь ссылку View внутри (это ... неимеет смысл)
Шаблон наблюдателя?Создайте статический класс 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 Я даже не знаю, если это больше паттерны наблюдателей ...
Интересно, что будет лучшим способом сделать это?