SQL Server と SignalR を使用して次の構成をセットアップしようとしました
http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server
SQL サーバーをプロファイリングすると、SignalR が DB を呼び出していることがわかりますが、ハブを呼び出して接続されているすべてのクライアントにメッセージを送信すると、メッセージは接続されたブラウザーに送信されません。
何が問題なのですか?
SQL Server と SignalR を使用して次の構成をセットアップしようとしました
http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server
SQL サーバーをプロファイリングすると、SignalR が DB を呼び出していることがわかりますが、ハブを呼び出して接続されているすべてのクライアントにメッセージを送信すると、メッセージは接続されたブラウザーに送信されません。
何が問題なのですか?
@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);
}
}