如何在HubbipleLine之外使用SignalR 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

我正在使用信号器向我的所有客户广播消息。我需要在我的hub类之外触发广播,即如下所示:

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("...")*/;