Signalr 在信号器中向断开连接的客户端发送消息时出现异常

Signalr 在信号器中向断开连接的客户端发送消息时出现异常,signalr,signalr-hub,Signalr,Signalr Hub,在集线器中,我使用 try { GlobalHost.ConnectionManager.GetHubContext<ContextManagerHub>().Clients.Client(connectionID).SendMessage(message); } catch(Exception ex) { HandleError(ex); } 试试{ GlobalHost.ConnectionManager.GetHubContext().Clients.Cli

在集线器中,我使用

try { 
    GlobalHost.ConnectionManager.GetHubContext<ContextManagerHub>().Clients.Client(connectionID).SendMessage(message);
} catch(Exception ex) {
    HandleError(ex);
}
试试{
GlobalHost.ConnectionManager.GetHubContext().Clients.Client(connectionID).SendMessage(message);
}捕获(例外情况除外){
HandleError(ex);
}
connectionId使用OnConnection存储,使用OnDisconnected在集线器上删除。
我有点担心我正在向断开连接的客户端发送消息,如果这样做,我希望得到异常。但上面的代码从未引发异常,即使我尝试使用connectionID=“BAD\u ID”。有人知道如何判断SendMessage是否真的失败了吗?

因此SignalR实际上不会验证您发送到的ConnectionId是否无效。之所以没有出现这种情况,是因为客户端的ConnectionId非常类似于信号器组。它们引用了可以订阅和发布到的主题

因此,当发送到无效的ConnectionId时,您将消息推送到一个尚不存在的主题;所以它被创造了。这背后的原因是,如果客户机碰巧通过重新连接或其他方式使用该连接id来到服务器,那么他们将收到在停机期间错过的任何消息


因此,对于您的案例,我建议您通过OnConnected和OnDisconnected方法跟踪客户端,然后在发送给它们之前运行逻辑以验证它们是否存在。

感谢您的澄清!