如何使用SignalR枢纽实例hubpipleline之外(How to use SignalR h

2019-07-20 16:25发布

我使用SignalR广播消息,我所有的客户。 我需要触发我的HUB类即类似下面外广播:

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

我收到错误消息:

使用不是由HubPipeline创建一个枢纽实例不受支持。

Answer 1:

您需要使用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 。



Answer 2:

一个小更新对于那些谁可能想知道的GlobalHost已经一去不复返了。 SignalR已完全重写了.NET的核心。 所以,如果你使用的是SignalR.Core包( SignalR版本之间的差异 ),则通过将其注入您的服务中获得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("...")*/;

微软实况是在这里: 从轮毂外发送SignalR的消息 。



文章来源: How to use SignalR hub instance outside of the hubpipleline