web-dev-qa-db-ja.com

ASP.NET Core SignalRでは、サーバーからクライアントにメッセージを送信するにはどうすればよいですか?

新しくリリースされたASP.NET Core 2.1を使用して、SignalRサーバーとクライアントを正常にセットアップしました。私はChatHubHubに拡張してチャットルームを構築しました。クライアントからメッセージが届くたびに、サーバーはClients.Othersを介してバックアウトします。

私がまだ理解していないのは、クライアントにメッセージを送信する方法ですnot着信メッセージへの応答として。サーバーが作業を行って結果を生成する場合、特定のクライアントにメッセージを送信するためにHubにアクセスするにはどうすればよいですか? (またはHubへのアクセスも必要ですか?メッセージを送信する別の方法はありますか?)

ほとんどの結果は古いバージョンのASP.NETおよびSignalRから得られるため、この問題の検索は困難です。

11
TheBuzzSaw

あなたはサービスに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);
    }
}
8
Simply Ged

hubcontextを使用するクラスにhubcontextを簡単に挿入します。

詳細は、あなたがそこにあります。

コールコントローラからSignalRコアハブ法

1
Stephu

あなたの質問に答えるSignalR HubContextの公式Microsoft Docsがあります https://docs.Microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1

他の人が指摘しているようしかし、はい、あなたは外ハブのアクセスハブメソッドに依存性注入を経てIHubContextのインスタンスを取得する必要があります。

1
Mikael Mengistu