Wie kann ich eine Benachrichtigung vom Server an alle Clients in WCF senden (Broadcast können Sie sagen)?

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

Frage

Ich möchte Benachrichtigungsnachricht an alle Kunden in jeder Sekunde von Netto-tcp WCF-Dienst senden, BROADCAST kann man sagen?

Nachdem die hilfreichen Antworten

Ich schrieb die folgende Methode, die Benachrichtigungen (Herzschlag) an alle angeschlossenen Nutzer senden

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

Ich bin besorgt über die Callback-Methode als Client aufrufen kann seine Anwendung schließen, aber ich behandelt es die Try-Catch verwenden, das Timeout zu verringern, und die breite Guss parallel senden, so dass ausreichend?

War es hilfreich?

Lösung

Sie werden zur Einrichtung benötigen einen Rückruf-Service; Ich schrieb einen ein während zurück

Andere Tipps

Um das zu tun, müssen Sie eine Liste aller angeschlossenen Clients (die allgemeine Praxis fo diese Anmelde- und Abmeldeverfahren ist die Schaffung einer Liste von Objekten zu erstellen und verwalten repräsentieren Ihre Kunden incuding ihre Callbackcontext) schaffen und beizubehalten. Dann, mit einem System.Time.Timers, können Sie Schleife durch die Client-Liste verbunden und abschicken.

Tipp. Dieses Verfahren könnte auch als Keep-Alive-handeln oder Methode Hear-Beats (falls dies nicht, dass es Zweck von Design), indem Sie die Möglichkeit des Hinzufügen Kunden aus der Liste zu entfernen, wenn der Dienst nicht den Rückruf an sie senden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top