2

SQL Server と SignalR を使用して次の構成をセットアップしようとしました

http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server

SQL サーバーをプロファイリングすると、SignalR が DB を呼び出していることがわかりますが、ハブを呼び出して接続されているすべてのクライアントにメッセージを送信すると、メッセージは接続されたブラウザーに送信されません。

何が問題なのですか?

4

1 に答える 1

3

@smnbss に感謝します。質問内のコメントで私の命を救ってくれました。将来同じ問題を抱えているすべての人に明確にするために、ここに間違った実装があります。次のようなコンテキストを一度だけ取得していました。

public class SyncService : ISyncService
{
    private IHubContext StatusChangeHub { get; set; }

    public GatewaySyncService()
    {
        StatusChangeHub = GlobalHost.ConnectionManager.GetHubContext<Hub>();
    } 

    public void SyncStatusChange(Status newStatus)
    {
        StatusChangeHub.Clients.All.onStatusChange(newStatus);      
    }
}

しかし、どういうわけか、これはバックプレーンを使用していないときにのみ機能します。そして正しい実装: メッセージを送信するたびにコンテキストを取得する必要があります:

public class SyncService : ISyncService
{
    public void SyncStatusChange(Status newStatus)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<Hub>();

        context.Clients.All.onStatusChange(newStatus);      
    }
}
于 2014-12-03T12:58:08.963 に答える