0

在集线器中,我正在使用

try { 
    GlobalHost.ConnectionManager.GetHubContext<ContextManagerHub>().Clients.Client(connectionID).SendMessage(message);
} catch(Exception ex) {
    HandleError(ex);
}

connectionId 使用 OnConnected 存储,并使用集线器上的 OnDisconnected 删除。我有点担心我正在向断开连接的客户端发送消息,如果我这样做了,我希望得到例外。但是上面的代码永远不会引发异常,即使我尝试使用 connectionID = "BAD_ID"。任何人都知道如何确定 SendMessage 是否真的失败了?

4

1 回答 1

1

因此,SignalR 实际上不会验证您是否发送到无效的 ConnectionId。不会发生这种情况的原因是因为客户端的 ConnectionId 很像 SignalR 组。它们引用了一个可以订阅和发布的主题。

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

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

于 2013-11-08T00:45:53.667 回答