我想每秒从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处理它,减少超时,并且并行发送广播,那就足够了吗?
答案 0 :(得分:5)
您需要设置回拨服务;我在前一段时间写了simple beginners guide
答案 1 :(得分:2)
为了做到这一点,你需要创建并保留所有连接客户端的列表(通常的做法是创建LogIn和LogOut方法来创建和管理代表客户端的对象列表,包括他们的CallbackContext)。 然后,使用System.Time.Timers,您可以遍历连接的客户端列表并发送通知。
提示。如果服务无法向其发送回调,则此方法还可以通过添加可能性从列表中删除客户端来充当Keep-Alive或Hear-Beat方法(如果这不是设计目的)。