Как я могу отправить уведомление с сервера всем клиентам в WCF (вещание можно сказать)? - PullRequest
5 голосов
/ 17 июня 2009

Я хочу отправлять уведомления каждую секунду от службы net tcp WCF всем клиентам, Трансляцию можно сказать?

После полезных ответов

Я написал следующий метод, который будет отправлять уведомления (сердцебиение) всем подключенным пользователям

foreach (IHeartBeatCallback callback in subscribers)
{
  ThreadPool.QueueUserWorkItem(delegate(object state)
  {
    ICommunicationObject communicationCallback = (ICommunicationObject)callback;
    if (communicationCallback.State == CommunicationState.Opened)
    {
      try
      {
         callback.OnSendHeartBeat(_heartbeatInfo.message,    _heartbeatInfo.marketstart,_heartbeatInfo.marketend, _heartbeatInfo.isrunning,   DateTime.Now);
      }
      catch (CommunicationObjectAbortedException)
      {
        Logger.Log(LogType.Info, "BroadCast", "User aborted");
        communicationCallback.Abort();
      }
      catch (TimeoutException)
      {
       Logger.Log(LogType.Info, "BroadCast", "User timeout");
       communicationCallback.Abort();
      }
      catch (Exception ex)
      {
        Logger.Log(LogType.Error, "BroadCast", "Exception " + ex.Message + "\n" +  ex.StackTrace);
        communicationCallback.Abort();
      }

    }
    else
    {
      DeletionList.Add(callback);
    }
  }
  );
}

Я беспокоюсь о вызове метода обратного вызова, так как клиент может закрыть свое приложение, но я обработал его с помощью try catch, уменьшил тайм-аут и отправил широкое преобразование параллельно, так что этого достаточно?

Ответы [ 2 ]

5 голосов
/ 17 июня 2009

Вам необходимо настроить службу обратного вызова; Я написал простое руководство для начинающих некоторое время назад

2 голосов
/ 17 июня 2009

Чтобы сделать это, вам нужно создать и поддерживать список всех подключенных клиентов (общая практика заключается в создании методов LogIn и LogOut для создания и управления списком объектов, представляющих ваших клиентов, включая их CallbackContext). Затем с помощью System.Time.Timers вы можете просмотреть список подключенных клиентов и отправить уведомление.

Совет. этот метод может также действовать как метод Keep-Alive или Hear-Beat (если это не является его целью по замыслу), добавляя возможность удалять клиентов из вашего списка, если служба не может отправить им обратный вызов.

...