Каков эффект вызова HubContext.Clients.Caller
или HubContext.Clients.Others
с контроллера? Я вижу, это зависит от идентификатора соединения. Какое значение это будет иметь в этой ситуации?
Нет ни .Caller
, ни .Others
на HubContext.Clients
(типа HubClients<THub>
).
" Невозможно получить доступ к тем из IHubContext
. Caller
и Others
, оба зависят от знания, какой клиент является вызывающим абонентом. Когда вы находитесь в IHubContext, мы не знаем и можем даже не будет текущим вызывающим абонентом, поскольку вы можете быть в действии контроллера MVC и т. д."
- aspnet / SignalR # 2274 (комментарий)
(изнутри действия контроллера), как я могу получить идентификатор соединения (для клиента, который в данный момент вызывает Web API), который я мог бы использовать с методами HubContext.Clients
?
" нет способа узнать, кто является текущим вызывающим абонентом из IHubContext "
- aspnet / SignalR # 2274 (комментарий)
Использование групп и пользователей - один из способов смягчить это.
" Если у вас есть доступ к идентификатору пользователя, инициировавшего действие, вы можете использовать .Users(userId)
для отправки сообщения всем соединениям этого пользователя. Аналогичным образом вы добавляете соединения SignalR в группу. и отправить в эту группу, используя .Group(groupName)
"
- aspnet / SignalR # 2274 (комментарий)
Либо получите идентификатор подключения на стороне клиента.
Вы можете получить идентификатор соединения на клиенте, который вызывает API, а затем отправить его на контроллер.
Hub:
public string GetConnectionId()
{
return Context.ConnectionId;
}
Клиент:
hub.invoke('getConnectionId')
.then(function (connectionId) {
// Send the connectionId to controller
});