如何从服务器向WCF中的所有客户端发送通知消息(您可以说是广播)?

如何从服务器向WCF中的所有客户端发送通知消息(您可以说是广播)?,wcf,notifications,broadcast,wcf-callbacks,Wcf,Notifications,Broadcast,Wcf Callbacks,我想每秒从net tcp WCF服务向所有客户端发送通知消息, 你能说什么 在得到有用的答案之后 我编写了以下方法,该方法将向所有连接的用户发送通知(heartbeat) foreach (IHeartBeatCallback callback in subscribers) { ThreadPool.QueueUserWorkItem(delegate(object state) { ICommunicationObject communicationCallback = (I

我想每秒从net tcp WCF服务向所有客户端发送通知消息, 你能说什么

在得到有用的答案之后

我编写了以下方法,该方法将向所有连接的用户发送通知(heartbeat)

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来处理它,减少超时,并并行发送宽频广播,所以这就足够了吗?

为了做到这一点,您需要创建并保存一个所有连接客户端的列表(实现这一点的一般做法是创建登录和注销方法,以创建和管理代表客户机的对象列表,包括其CallbackContext)。 然后,使用System.Time.Timers,您可以循环访问已连接的客户端列表并发送通知


提示:这种方法也可以作为“保持活力”或“听到节拍”的方法(如果这不是设计的目的)通过添加在服务无法向客户发送回调时从列表中删除客户的可能性。

您需要设置一个回调服务;我不久前写了一篇文章

这篇文章很好,但我发现它将串行数据发送到连接的客户,这意味着如果客户在发送回调时关闭了his应用程序系统将等待超时发生,当我应用相同的代码时,这种情况发生在我身上,我如何解决这个问题(使超时非常小?)您可以通过减少向后调用的超时来解决它,或者,更合理地说,将回调放在后台工作线程中,以便它们并行运行。这只是一个演示:)如果没有在帖子中提供足够的细节,答案不应该链接到外部资源。链接已经失效,现在答案也没用了。