在Hub中,我正在使用
向客户发送消息try {
GlobalHost.ConnectionManager.GetHubContext<ContextManagerHub>().Clients.Client(connectionID).SendMessage(message);
} catch(Exception ex) {
HandleError(ex);
}
connectionId使用OnConnected存储,并使用Hub上的OnDisconnected删除。 我有点担心我正在向断开连接的客户端发送消息,并且如果我这样做,我希望得到例外。但是上面的代码永远不会引发异常,即使我尝试使用connectionID =“BAD_ID”。任何人都知道如何判断SendMessage是否真的失败了?
答案 0 :(得分:1)
因此,SignalR实际上不会验证您是否发送到无效的ConnectionId。不会发生这种情况的原因是因为客户端的ConnectionId很像SignalR组。他们引用了可以订阅和发布的主题。
因此,当发送到无效的ConnectionId时,您将消息推送到尚不存在的主题;所以它被创造了。这背后的原因是,如果客户端碰巧通过重新连接或其他方式来到具有该连接ID的服务器,那么他们将接收他们在停机期间错过的任何消息。
对于您的情况,我建议您通过OnConnected和OnDisconnected方法跟踪客户端,然后运行逻辑以在发送给他们之前验证它们是否存在。