доступ к Context.ConnectionID за пределами концентратора в SignalR

Я хочу иметь возможность отправлять сообщения определенной учетной записи пользователя с помощью SignalR.
Прямо сейчас я могу отправить всем!
Я ищу любой способ получить доступ к context.ConnectionID в контроллере вне концентратора. Я попытался получить к нему доступ внутри контроллера с помощью iHubContext, а внутри концентратора я попытался сохранить значение идентификатора соединения в сеансе, но оба они не поддерживаются.

Как лучше всего получить доступ к идентификатору подключения из контроллера за пределами концентратора?

вот метод действия из ChatController, который используется для отправки сообщения всем

public IActionResult PosaljiPoruku()
    {
        _hubContext.Clients.All.SendAsync("PrimljenaPoruka", "aaa");
        return PartialView("SubmitFormPartial");
    }

Любая помощь приветствуется!
Спасибо за попытку помочь!


person sasko    schedule 18.12.2020    source источник
comment
Привет, @sasko, есть новости по этому делу?   -  person Fei Han    schedule 24.12.2020
comment
К сожалению, не понял, как сопоставить пользователя и идентификатор соединения.   -  person sasko    schedule 28.12.2020


Ответы (1)


Как лучше всего получить доступ к идентификатору подключения из контроллера за пределами концентратора?

Из этого документа об отправке сообщений извне хаба вы найдете:

Когда методы концентратора вызываются извне класса Hub, вызывающий объект не связан с вызовом. Следовательно, нет доступа к свойствам ConnectionId, Caller и Others.

Я хочу иметь возможность отправлять сообщения определенной учетной записи пользователя с помощью SignalR.

Вы можете сопоставить пользователя и ConnectionId(s), когда клиент подключен к серверу-концентратору, а затем, если вы хотите отправить сообщение конкретному пользователю из действия контроллера за пределами вашего концентратора, вы можете запросить таблицу сопоставления, чтобы сначала получить соответствующие идентификаторы подключения на основе имени пользователя и т. Д. и передача идентификаторов подключений методу действия.

await _hubContext.Clients.Client("connection_id_here").SendAsync("PrimljenaPoruka", "aaa");

Кроме того, вы можете добиться того же, создав однопользовательскую группу (группу для каждого пользователя), а затем отправив сообщение этой группе, если вы хотите связаться только с этим конкретным пользователем.

await _hubContext.Clients.Group("group_name_here").SendAsync("PrimljenaPoruka", "aaa");
person Fei Han    schedule 22.12.2020
comment
Привет! спасибо за респоднинг. Извините за мой поздний ответ! Я хочу каким-то образом сопоставить идентификатор соединения с пользователем. Но я не могу найти примеров того, как это сделать, вне документации. AFAIK, поскольку я использую ihubcontext для подключения, я не могу вызывать какие-либо пользовательские методы из концентратора в контроллере. - person sasko; 27.12.2020