将 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中文网其他相关文章!