web-dev-qa-db-ja.com

ハブパイプラインの外側でSignalRハブインスタンスを使用する方法

SignalRを使用して、すべてのクライアントにメッセージをブロードキャストしています。ハブクラスの外部でブロードキャストをトリガーする必要があります。つまり、次のようなものです。

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

次のようなエラーメッセージが表示されます。

HubPipelineで作成されていないハブインスタンスの使用はサポートされていません。

78
Nitin Agrawal

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 で詳しく説明されています。

132
halter73

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メッセージを送信

3