SignalR Core 為 ASP.NET Core 應用程式提供了強大的即時通訊機制。本文解決了從控制器呼叫 SignalR 集線器方法的常見場景。
提供的範例示範了需要在完成從 Windows 服務啟動的外部操作時通知連線的用戶端。由於該服務無法直接與 SignalR 交互,因此我們探索了兩種潛在的解決方案。
將所需集線器的IHubContext 注入控制器:
public class VarDesignCommController : Controller { public VarDesignCommController(IHubContext<VarDesignHub> hubcontext) { HubContext = hubcontext; } ... }
然後調用hub 方法:
await this.HubContext.Clients.All.InvokeAsync("Completed", id);
為了更精細的控制,建立一個類型化的客戶端介面:
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); } }
Inject類型化的集線器上下文並呼叫方法:
// In VarDesignCommController [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 Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!