代码之家  ›  专栏  ›  技术社区  ›  Ahmed

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

  •  5
  • Ahmed  · 技术社区  · 16 年前

    你能说什么?

    在得到有用的答案之后

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

    2 回复  |  直到 16 年前
        1
  •  5
  •   blowdart    16 年前

    您需要设置一个回调服务;我写了一封信 simple beginners guide 不久前

        2
  •  2
  •   AlexDrenea    16 年前

    为了做到这一点,您需要创建并维护一个所有已连接客户端的列表(通常的做法是创建登录和注销方法,以创建和管理一个表示包含回调上下文的客户端的对象列表)。

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

    推荐文章