如何从服务器向WCF中的所有客户端发送通知消息(您可以说是广播)?
-
06-07-2019 - |
题
我想每秒从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处理它,减少超时,并且并行发送广播,那就足够了吗?
解决方案
您需要设置回拨服务;我写了一篇简单的初学者指南回来的时候
其他提示
为了做到这一点,你需要创建并保留所有连接客户端的列表(通常的做法是创建LogIn和LogOut方法来创建和管理代表客户端的对象列表,包括他们的CallbackContext)。 然后,使用System.Time.Timers,您可以遍历连接的客户端列表并发送通知。
提示。如果服务无法向其发送回调,则此方法还可以通过添加可能性从列表中删除客户端来充当Keep-Alive或Hear-Beat方法(如果这不是设计目的)。
不隶属于 StackOverflow