如何在hubpipleline之外使用SignalR hub实例

时间:2013-02-28 05:26:08

标签: signalr signalr-hub

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

var broadcast = new chatHub(); broadcast.Send("Admin","stop the chat");

我收到错误消息:

  

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

2 个答案:

答案 0 :(得分:131)

您需要使用GetHubContext

var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
context.Clients.All.Send("Admin", "stop the chat");

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#callfromoutsidehub更详细地介绍了这一点。

答案 1 :(得分:1)

针对那些可能想知道GlobalHost去向的人的一个小更新。 .NET核心已完全重写SignalR。因此,如果您使用SignalR.Core软件包(Difference between SignalR versions),则可以通过将SignalR集线器上下文注入服务中来获得一个实例:

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

Microsoft文档在这里:Send SignalR messages from outside the hub