Идентификатор соединения при вызове метода SignalR Core Hub из контроллера - PullRequest
0 голосов
/ 16 мая 2018

Это продолжение другого вопроса и ответа .Каков эффект вызова HubContext.Clients.Caller или HubContext.Clients.Others с контроллера?Я вижу, это зависит от ID соединения .Какое значение это будет иметь в этой ситуации?

Если идентификатор соединения (и, следовательно, Caller и Others) недопустим, то (из действия контроллера), как я могу получить идентификатор соединения (дляклиент, в данный момент вызывающий Web API), который я мог бы использовать с методами HubContext.Clients?

1 Ответ

0 голосов
/ 17 мая 2018

Каков эффект вызова 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
    });
...