Comment puis-je envoyer un message de notification du serveur à tous les clients dans WCF (diffusion peut-on dire)?

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

Question

Je veux envoyer un message de notification toutes les secondes du service net tcp WCF à tous les clients, Diffuser vous pouvez dire?

Après les réponses utiles

J'ai écrit la méthode suivante pour envoyer des notifications (pulsations) à tous les utilisateurs connectés

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

Je suis inquiet au sujet de l'appel de la méthode de rappel car le client peut fermer son application, mais je l'ai traitée à l'aide de la capture try, ai réduit le délai d'attente et envoyé la diffusion en parallèle, est-ce suffisant?

Était-ce utile?

La solution

Vous devrez configurer un service de rappel. J'ai écrit un guide du débutant simple a pendant le retour

Autres conseils

Pour ce faire, vous devez créer et conserver une liste de tous les clients connectés (la pratique courante consiste à créer des méthodes LogIn et LogOut afin de créer et de gérer une liste d’objets représentant vos clients incluant leur CallbackContext). Ensuite, avec un System.Time.Timers, vous pouvez parcourir la liste des clients connectés et envoyer la notification.

Conseil. Cette méthode peut également servir de méthode Keep-Alive ou Hear-Beat (si ce n’est pas son objectif) en ajoutant la possibilité de supprimer des clients de votre liste si le service ne peut pas leur envoyer le rappel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top