0

ハブでは、次を使用してクライアントにメッセージを送信しています

try { 
    GlobalHost.ConnectionManager.GetHubContext<ContextManagerHub>().Clients.Client(connectionID).SendMessage(message);
} catch(Exception ex) {
    HandleError(ex);
}

connectionId は OnConnected を使用して保存され、ハブで OnDisconnected を使用して削除されます。切断されたクライアントにメッセージを送信しているのではないかと少し心配です。送信した場合は例外を取得したいと考えています。しかし、connectionID = "BAD_ID" を使用しようとしても、上記のコードで例外が発生することはありません。SendMessage が実際に失敗したかどうかを判断する方法を知っている人はいますか?

4

1 に答える 1

1

そのため、無効な ConnectionId に送信した場合、SignalR は実際には検証しません。これが発生しない理由は、クライアントの ConnectionId が SignalR グループによく似ているためです。サブスクライブおよび公開できるトピックを参照します。

したがって、無効な ConnectionId に送信すると、まだ存在しないトピックにメッセージがプッシュされます。それで作成されます。これの背後にある理由は、クライアントが再接続または他の手段を介してその接続 ID を使用してサーバーに到達した場合、ダウンタイム中に見逃したメッセージを受信することです。

あなたのケースでは、OnConnected および OnDisconnected メソッドを介してクライアントを追跡し、ロジックを実行して、クライアントに送信する前にそれらが存在することを確認することをお勧めします。

于 2013-11-08T00:45:53.667 に答える