这是another question and answer的后续行动。从控制器调用HubContext.Clients.Caller
或HubContext.Clients.Others
的效果是什么?我认为这取决于connection ID。在这种情况下它会有什么价值?
如果连接ID(以及Caller
和Others
)无效,那么(从控制器操作中)我如何获得连接ID(对于当前调用Web API的客户端)我可以使用HubContext.Clients
的方法吗?
答案 0 :(得分:6)
从控制器调用
HubContext.Clients.Caller
或HubContext.Clients.Others
有什么影响?我看到它取决于连接ID。在这种情况下它会有什么价值?
.Caller
(HubClients<THub>
类型)上既没有.Others
也没有HubContext.Clients
。
“无法访问来自IHubContext
的内容。Caller
和Others
两者都取决于知道哪个客户端是来电者。当您在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)
您可以在调用API的客户端上获取连接ID,然后将其发送到控制器。
集线器:
public string GetConnectionId()
{
return Context.ConnectionId;
}
客户端:
hub.invoke('getConnectionId')
.then(function (connectionId) {
// Send the connectionId to controller
});