从Controller调用SignalR Core Hub方法时的连接ID

时间:2018-05-16 09:48:46

标签: c# signalr asp.net-core-signalr asp.net-core-2.1

这是another question and answer的后续行动。从控制器调用HubContext.Clients.CallerHubContext.Clients.Others的效果是什么?我认为这取决于connection ID。在这种情况下它会有什么价值?

如果连接ID(以及CallerOthers)无效,那么(从控制器操作中)我如何获得连接ID(对于当前调用Web API的客户端)我可以使用HubContext.Clients的方法吗?

1 个答案:

答案 0 :(得分:6)

  

从控制器调用HubContext.Clients.CallerHubContext.Clients.Others有什么影响?我看到它取决于连接ID。在这种情况下它会有什么价值?

.CallerHubClients<THub>类型)上既没有.Others也没有HubContext.Clients

无法访问来自IHubContext的内容。CallerOthers两者都取决于知道哪个客户端是来电者。当您在IHubContext中时,我们不会不知道甚至 当前的调用者,因为你可能处于MVC控制器操作等等。
- aspnet/SignalR#2274 (comment)

  

(从控制器操作中)我如何获得可以与HubContext.Clients方法一起使用的连接ID(对于当前调用Web API的客户端)?

无法知道当前来电者是谁来自IHubContext
- aspnet/SignalR#2274 (comment)

使用组和用户是缓解此问题的一种方法。

如果您有权访问发起操作的用户的用户ID,则可以使用.Users(userId)向该用户的所有连接发送消息。同样,您可以添加SignalR连接到一个群组并使用.Group(groupName) “发送到该群组 - aspnet/SignalR#2274 (comment)

或者,在客户端获取连接ID。

您可以在调用API的客户端上获取连接ID,然后将其发送到控制器。

集线器:

public string GetConnectionId()
{
    return Context.ConnectionId;
}

客户端:

hub.invoke('getConnectionId')
    .then(function (connectionId) {
        // Send the connectionId to controller
    });
相关问题