新しくリリースされたASP.NET Core 2.1を使用して、SignalRサーバーとクライアントを正常にセットアップしました。私はChatHub
をHub
に拡張してチャットルームを構築しました。クライアントからメッセージが届くたびに、サーバーはClients.Others
を介してバックアウトします。
私がまだ理解していないのは、クライアントにメッセージを送信する方法ですnot着信メッセージへの応答として。サーバーが作業を行って結果を生成する場合、特定のクライアントにメッセージを送信するためにHub
にアクセスするにはどうすればよいですか? (またはHub
へのアクセスも必要ですか?メッセージを送信する別の方法はありますか?)
ほとんどの結果は古いバージョンのASP.NETおよびSignalRから得られるため、この問題の検索は困難です。
あなたはサービスに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);
}
}
あなたの質問に答えるSignalR HubContextの公式Microsoft Docsがあります https://docs.Microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1
他の人が指摘しているようしかし、はい、あなたは外ハブのアクセスハブメソッドに依存性注入を経てIHubContextのインスタンスを取得する必要があります。