SignalR Clients.User() 不触发客户端

SignalR Clients.User() doesn't trigger the client

我使用 SignalR 和 .NET6。我有一个三向设置,其中有一个服务器 (C#)、一个主机 (C#) 和许多客户端 (JS)。

我的服务器从任何将其连接到主机的客户端接收到客户端声明。客户端和主机实际上并不认识对方,只能通过服务器相互了解。

当我的客户端声明自己并提供一个访问令牌以绑定到主机时,我触发了以下两行:

await Clients.Caller.SendAsync(ClientListenEvent.DeclareClientAck, (int)response, clientId);
await Clients.User(host.HostId).SendAsync(HostListenEvent.ClientJoin, clientId);

第一行让Client知道它在服务器上声明成功了。然而,第二行从不触发关联主机上的任何内容。它只是由服务器发出,然后主机永远不会接收它。

在主机上应该触发此 SignalR 事件:

connector.On<string>("clientJoin", (clientId) =>
{
    OnClientJoin?.Invoke(this, clientId);
    Debug.Log($"Adding Client: [{_indexToClientMap.Count};{clientId}]");
    _indexToClientMap.Add(_indexToClientMap.Count, clientId);
});

但它从来没有。我不太确定为什么会这样,今天我已经尝试调试了几个小时。有帮助吗?

原来它不起作用的原因是因为我使用了 User() 而不是 Client()

所以应该是 Clients.Client(...) 而不是 Clients.User(...) 并且类似地,如果您需要发送给多个客户端,您可以使用 Clients.Clients(...).

原来 User 是服务器自己的上下文中的经过身份验证的用户,而 Client 指的是连接。