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