Como posso enviar uma mensagem de notificação do servidor para todos os clientes no WCF (Broadcast você pode dizer)?

StackOverflow https://stackoverflow.com/questions/1006058

Pergunta

Eu quero enviar mensagem de notificação a cada segundo de serviço de rede TCP WCF a todos os clientes, Transmissão você pode dizer?

Depois das respostas votos

Eu escrevi o seguinte método que irá enviar notificações (pulsação) para todos os usuários conectados

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);
    }
  }
  );
}

Estou preocupado em chamar o método de retorno que o cliente pode fechar seu pedido, mas eu segurei-lo usando o try catch, diminuir o tempo de espera, e enviar o amplo elenco em paralelo, por isso é que é suficiente?

Foi útil?

Solução

Você precisa configurar um serviço de chamada; Eu escrevi um simples iniciantes guiar um tempo atrás

Outras dicas

A fim de fazer isso, você precisa criar e mantain uma lista de todos os clientes conectados (a prática geral para fo isso está criando métodos de login e logout para criar e gerenciar uma lista de objeto que representa seus clientes incuding sua CallbackContext). Então, com um System.Time.Timers, você pode percorrer a lista de clientes conectados e enviar a notificação.

Dica. este método também poderia atuar como um método Ouve-Beat Keep-Alive ou (se isto não é de propósito por design) adicionando a possibilidade de se remover os clientes da sua lista se o serviço não pode enviar a chamada de retorno para eles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top