В ASP.NET Core SignalR как отправить сообщение с сервера клиенту? - PullRequest
0 голосов
/ 11 июня 2018

Я успешно настроил сервер и клиент SignalR, используя недавно выпущенный ASP.NET Core 2.1.Я создал чат-комнату, заставив свой ChatHub extension Hub: всякий раз, когда сообщение приходит от клиента, сервер отправляет его обратно через Clients.Others.

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

Поиск этой проблемы затруднителен, так как большинство результатов получены из старых версий ASP.NET и SignalR.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Простое внедрение hubcontext в класс, в котором вы используете hubcontext.

Подробности вы найдете там:

Вызовите метод SignalR Core Hub из Controller

0 голосов
/ 19 июня 2018

В настоящее время существуют официальные документы Microsoft для SignalR HubContext, которые отвечают на ваш вопрос https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1

Но да, как уже отмечали другие, вам нужно получить экземпляр IHubContext через внедрение зависимостей для доступа к методам концентратораза пределами центра.

0 голосов
/ 11 июня 2018

Вы можете внедрить класс IHubContext<T> в службу и вызывать клиентов, используя это.

public class NotifyService
{
    private readonly IHubContext<ChatHub> _hub;

    public NotifyService(IHubContext<ChatHub> hub)
    {
        _hub = hub;
    }

    public Task SendNotificationAsync(string message)
    {
        return _hub.Clients.All.InvokeAsync("ReceiveMessage", message);
    }
}

Теперь вы можете внедрить NotifyService в свой класс и отправлять сообщения всем клиентам:

public class SomeClass
{
    private readonly NotifyService _service;

    public SomeClass(NotifyService service)
    {
        _service = service;
    }

    public Task Send(string message)
    {
        return _service.SendNotificationAsync(message);
    }
}
...