將SignalR Hub 方法整合到ASP.NET Core 控制器中
此查詢深入探討了SignalR Core Hub 方法在ASP.NET中的整合核心控制器。特定用例包括在任務完成後接收來自 Windows 服務的發布請求,該服務與外部程式進行交互,並將此資訊廣播到連接的 SignalR 用戶端。
解決方案 1:直接存取 HubContext
將IHubContext介面注入到控制器中:
public VarDesignCommController(IHubContext<VarDesignHub> hubcontext) { HubContext = hubcontext; ... } private IHubContext<VarDesignHub> HubContext { get; set; }
然後,直接使用以下方式在所有客戶端上呼叫方法:
await this.HubContext.Clients.All.InvokeAsync("Completed", id);
此方法在所有連接的客戶端上執行方法,提供簡單快速的解決方案。
解決方案2:利用型別集線器
定義一個介面來表示伺服器端方法呼叫客戶端:
public interface ITypedHubClient { Task BroadcastMessage(string name, string message); }
建立一個繼承自Hub
public class ChatHub : Hub<ITypedHubClient> { public void Send(string name, string message) { Clients.All.BroadcastMessage(name, message); } }
注入類型化集線器上下文並在控制器中使用它:
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" }; } }
這種方法利用類型化的集線器客戶端,可以實現更好的控制和可讀性。
以上是如何將 SignalR Hub 方法整合到 ASP.NET Core 控制器中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!