如何在 SignalR hub 管道之外使用 hub 实例

86
我正在使用SignalR向所有客户端广播消息。我需要在我的hub类之外触发广播,例如下面的内容: var broadcast = new chatHub(); broadcast.Send("Admin","stop the chat"); 我收到以下错误信息:

不支持使用未由HubPipeline创建的Hub实例。

2个回答

149

4
"context.Clients.All.Send" 不会向调用者广播,只会广播给其他人。有什么想法吗? - user384080
5
如果您正在使用 GetHubContext ,那么就没有调用方,因为它是用于在 Hub 之外使用的。Clients.All 应该可以覆盖当前连接到 Hub 的每个客户端。 - halter73
2
你确定这对于自托管的SignalR实例也适用吗? - Umar Farooq Khawaja
5
我有相同的代码,但方法 "Send" 或其他任何方法都不会被调用。 - nAviD
5
这不会为您提供hub的实例,而是提供IHubContext的实例。您不能使用它来调用hub方法。 - George Mauer
4
这对我很有用,只需做一个更改:context.Clients.All.broadcastMessage("Admin", "stop the chat"); ,使用broadcastMessage而不是Send。 - Wheel Builder

9

针对那些可能想知道GlobalHost去哪里了的人,这里有一个小更新。SignalR已经完全重写以适应.NET Core。因此,如果您正在使用SignalR.Core包(SignalR版本之间的区别),您可以通过将其注入到您的服务中来获取SignalR 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");
    }
}

Startup.cs 中:

services.AddSignalR()/*.AddAzureSignalR("...")*/;

微软文档在这里:从Hub外部发送SignalR消息


谢谢Maxim,这个在SignalR Core中完美地运行。 - Wowo Ot
谢谢Maxim,这对我来说非常完美,SignalR Core - Wowo Ot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接