コントローラーからの SignalR Core ハブ メソッドの呼び出し
ASP.NET Core アプリケーションでは、コントローラーから Hub メソッドを呼び出すことが必要になる場合があります。たとえば、外部サービスがタスクを実行し、接続されているクライアントに SignalR を通じて通知する必要がある場合。
解決策 1 (動的)
Microsoft.AspNetCore.SignalR ライブラリを使用する場合(バージョン 1.0.0-alpha2-final) では、ハブの IHubContext をコントローラーに挿入できます。以下に例を示します。
[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 (型付き)
サーバーがクライアント ハブで呼び出すことができるメソッドを定義するインターフェイスを作成することを検討してください。このアプローチは「型付きハブ エンドポイント」として知られています:
public interface ITypedHubClient { Task TaskCompleted(int id); } public class VarDesignHub : Hub<ITypedHubClient> { public Task TaskCompleted(int id) => Clients.All.InvokeAsync("Completed", id); }
コントローラーで、型付き HubContext を挿入し、メソッドを呼び出します:
[Route("API/demo")] public class DemoController : Controller { private IHubContext<VarDesignHub, ITypedHubClient> _chatHubContext; public DemoController(IHubContext<VarDesignHub, ITypedHubClient> chatHubContext) { _chatHubContext = chatHubContext; } [HttpGet] public IActionResult TaskCompleted(int id) { _chatHubContext.Clients.All.TaskCompleted(id); return Ok(); } }
以上がASP.NET Core コントローラーから SignalR Core ハブ メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。