从Controller调用SignalR Core Hub方法时的连接ID
这是另一个问题和答案的后续行动。 从控制器调用HubContext.Clients.Caller
或HubContext.Clients.Others
什么影响? 我看到它取决于连接ID 。 在这种情况下它会有什么价值?
如果连接ID(以及Caller
和Others
)无效,那么(从控制器操作中)我如何获得可以与HubContext.Clients
方法一起使用的连接ID(对于当前调用Web API的客户端)?
从控制器调用
HubContext.Clients.Caller
或HubContext.Clients.Others
什么影响? 我看到它取决于连接ID。 在这种情况下它会有什么价值?
HubContext.Clients
(类型为HubClients
)既没有.Caller
也没有.Caller
。
“ 从IHubContext
访问它们是IHubContext
。 Caller
和Others
都依赖于知道哪个客户端是调用者。当你在IHubContext中时,我们不知道,甚至可能没有当前的调用者,因为你可能在MVC控制器动作等 “
– aspnet / SignalR#2274(评论)
(从控制器操作中)我如何获得可以与
HubContext.Clients
的方法一起使用的连接ID(对于当前调用Web API的客户端)?
“ 无法知道当前调用者是谁来自IHubContext ”
– aspnet / SignalR#2274(评论)
使用组和用户是缓解这种情况的一种方法。
“ 如果您可以访问发起操作的用户的用户ID,则可以使用.Users(userId)
向该用户的所有连接发送消息。同样,您将SignalR连接添加到组并发送给该组group使用.Group(groupName)
“
– aspnet / SignalR#2274(评论)
或者,在客户端获取连接ID。
您可以在调用API的客户端上获取连接ID,然后将其发送到控制器。
毂:
public string GetConnectionId() { return Context.ConnectionId; }
客户:
hub.invoke('getConnectionId') .then(function (connectionId) { // Send the connectionId to controller });