5

我想每秒从 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 处理它,减少超时,并并行发送广播,这样就足够了吗?

4

2 回答 2

5

您需要设置回调服务;不久前我写了一个简单的初学者指南

于 2009-06-17T09:51:01.037 回答
2

为此,您需要创建并维护所有已连接客户端的列表(对此的一般做法是创建 LogIn 和 LogOut 方法来创建和管理代表您的客户端的对象列表,包括其 CallbackContext)。然后,使用 System.Time.Timers,您可以遍历已连接的客户端列表并发送通知。

提示。如果服务无法向它们发送回调,则此方法还可以通过添加从列表中删除客户端的可能性来充当 Keep-Alive 或 Hear-Beat 方法(如果这不是它的设计目的)。

于 2009-06-17T09:46:05.853 回答