これらの質問は似ていることに気づきました。
SignalR - Caller を除くすべてのクライアントにブロードキャストする
現在のクライアントを除く、グループ内のすべてのクライアントにメッセージを送信する
ただし、それらは古く、現在のドキュメントには、正しいことを行っているかどうかについての手がかりがありません。
質問/問題は次のとおりです。
サーバー側から、http 要求を送信した人を除く、接続されているすべてのクライアントにメッセージをブロードキャストできる必要があります。誰かがフォームを送信し、同じフォームに接続しているすべての人に、何かが送信されたことを通知することを想像してみてください。
私が今それをやっている方法は次のようなものです:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var connectionID = HttpContext.Request.Cookies["conn-id"].Value;
context.Clients.AllExcept(connectionID).addMessage(message);
接続が確立されるたびに、次のようにクライアント側の Cookie に ConnectionID を設定します。
$.connection.hub.start().done(function(){
$.cookie("conn-id",$.connection.hub.id);
});
だから私の質問は:
これは、この場合に私が取ることができる最善/唯一のアプローチですか? HttpContext.Current.Session.SessionID から
hub.Context.ConnectionID
取得する方法と同様の方法で、別の場所から要求を発信したクライアントの接続 ID を読み取ることはできますか?SessionID
たとえば、クライアントが SessionID に設定して接続するときに、接続 ID をプログラムで設定できますか? それは何らかの理由で問題を引き起こす可能性がありますか?もしそうなら、接続IDをプログラムで設定する方法と、これを行うためにどのイベントに接続する必要があるかを説明していただけますか?
ページがリロードされるたびに、接続 ID が別の GUID に変更されることに気付きました。ConnectionId を一度だけ設定し、少なくともセッションの存続期間中は維持するにはどうすればよいですか?