如何在HubbipleLine之外使用SignalR hub实例
我正在使用信号器向我的所有客户广播消息。我需要在我的hub类之外触发广播,即如下所示:如何在HubbipleLine之外使用SignalR hub实例,signalr,signalr-hub,Signalr,Signalr Hub,我正在使用信号器向我的所有客户广播消息。我需要在我的hub类之外触发广播,即如下所示: var broadcast=new chatHub(); 发送(“管理员”,“停止聊天”) 我收到的错误消息如下: 不支持使用非HubPipeline创建的集线器实例 您需要使用GetHubContext: var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>(); context.Clients.All.Send("A
var broadcast=new chatHub();
发送(“管理员”,“停止聊天”)代码>
我收到的错误消息如下:
不支持使用非HubPipeline创建的集线器实例
您需要使用GetHubContext
:
var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
context.Clients.All.Send("Admin", "stop the chat");
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.Send(“Admin”,“停止聊天”);
这在。中有更详细的描述,对于那些可能想知道GlobalHost
去了哪里的人来说,这是一个小更新。SignalR已完全重写为.net核心。因此,如果您使用的是signer.Core包(),那么您可以通过将其注入到您的服务中来获得signer hub上下文的实例:
public class MyNeedyService
{
private readonly IHubContext<MyHub> ctx;
public MyNeedyService(IHubContext<MyHub> ctx)
{
this.ctx = ctx;
}
public async Task MyMethod()
{
await this.ctx.All.SendAsync("clientCall");
}
}
Microsoft docu位于此处:.“context.Clients.All.Send”不会广播回调用者,只会广播回其他调用者。有什么想法吗?如果您使用的是GetHubContext
,则没有调用者,因为这意味着要在中心之外使用<代码>客户端。所有
都应寻址当前连接到集线器的每个客户端。我有相同的代码,但不会调用方法Send或任何其他方法。这不会为您获取集线器的实例,而是为您提供IHubContext
的实例。你不能用它来调用集线器方法。我只做了一个改动:context.Clients.All.broadcastMessage(“Admin”,“停止聊天”)代码>使用广播消息而不是发送。
services.AddSignalR()/*.AddAzureSignalR("...")*/;