SignalRを使用して、すべてのクライアントにメッセージをブロードキャストしています。ハブクラスの外部でブロードキャストをトリガーする必要があります。つまり、次のようなものです。
var broadcast = new chatHub(); broadcast.Send("Admin","stop the chat");
次のようなエラーメッセージが表示されます。
HubPipelineで作成されていないハブインスタンスの使用はサポートされていません。
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は、.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("...")*/;
Microsoft docuはここにあります: ハブの外部からSignalRメッセージを送信 。