Asp.Net Core コントローラーから SignalR Core Hub メソッドを呼び出す
この記事では、SignalR Core Hub メソッドを呼び出す方法について説明します。 ASP.NET Core コントローラー内から。この機能により、接続されたクライアントへのサーバー側の通信が可能になり、イベントをブロードキャストしたり、リアルタイム データを更新したりできます。
問題の概要
提供されたシナリオでは、ASP.NETコア アプリケーションは、タスクの完了時に Windows サービスからリクエストを受け取ります。タスクは、接続されているすべての SignalR Core クライアントにこのイベントについて通知することです。ただし、Windows サービスは SignalR への接続を直接確立できません。
解決策 1: HubContext をコントローラーに挿入する
1 つの方法は、適切な HubContext をコントローラー クラスに挿入することです。 。これにより、コントローラーのアクション メソッドからハブ メソッドを直接呼び出すことができます。
[Route("API/vardesigncomm")] public class VarDesignCommController : Controller { [HttpPut("ProcessVarDesignCommResponse/{id}")] public async Task<IActionResult> ProcessVarDesignCommResponse(int id) { await this.HubContext.Clients.All.InvokeAsync("Completed", id); return new JsonResult(true); } private IHubContext<VarDesignHub> HubContext { get; set; } }
このアプローチでは、接続されているすべてのクライアントとの直接通信が可能になりますが、クライアントの数によってはパフォーマンスに影響する可能性があります。
解決策 2: 型付きハブとクライアント インターフェイス
もう 1 つのアプローチには、型付きクライアントの定義が含まれますインターフェイスを作成し、型指定されたクライアント インターフェイスを使用して対応するハブから継承します。これにより、特定のメソッド呼び出しのために、型指定された HubContext をコントローラーに注入できるようになります。
型指定されたクライアント インターフェイス:
public interface ITypedHubClient { Task BroadcastMessage(string name, string message); }
型指定されたクライアントからのハブの継承インターフェイス:
public class ChatHub : Hub<ITypedHubClient> { public void Send(string name, string message) { Clients.All.BroadcastMessage(name, message); } }
コントローラーのインジェクションとメソッド呼び出し:
[Route("api/demo")] public class DemoController : Controller { IHubContext<ChatHub, ITypedHubClient> _chatHubContext; public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext) { _chatHubContext = chatHubContext; } [HttpGet] public IEnumerable<string> Get() { _chatHubContext.Clients.All.BroadcastMessage("test", "test"); return new string[] { "value1", "value2" }; } }
このアプローチにより、クライアントとのより的を絞った効率的な通信が可能になります。
以上がASP.NET Core コントローラーから SignalR Core ハブ メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。