如何在集线管之外使用 SignalR 集线器实例

我正在使用 SignalR 向我的所有客户广播消息。我需要在我的 hub 类之外触发广播,比如:

Var Broadcasting = new chatHub () ; 发送(“管理员”,“停止聊天”) ;

我收到错误消息:

不支持使用不是由 HubPipe 创建的 Hub 实例。

41433 次浏览

你需要使用 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中有更详细的描述。

对于那些可能想知道 GlobalHost去了哪里的人来说,这是一个小小的更新。SignalR 已经被完全重写了。净核。因此,如果您正在使用 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("...")*/;

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