2016-04-06 5 views
3

自己ホストSignalRサーバーを作成し、WPFデスクトップアプリケーションがそのサーバーに接続しています。私たちは単にログインログアウト管理を行っています。すべてがシンプルで機能しています。しかし、たまに、通常は2〜3時間後に、クライアントの半数がオンライン顧客リストから消えています。SignalR SelfHostサーバーで接続が閉じられていないのにOnDisconnectedイベントが発生する可能性はありますか?

OnDisconnectedイベントが接続に対してサーバー上でトリガーされるように見えますが、接続が閉じられていなくても発生します。 OnDisconnectedイベント後、これらの接続は引き続きデータを送受信できます。

接続が閉じられていないときにOnDisconnectedイベントがサーバーでトリガーされるようなシナリオはありますか。

答えて

1

接続が閉じられていないときに サーバーでOnDisconnectedイベントが発生するシナリオはありますか?

はい。接続がタイムアウトした場合、最初の切断と再接続が発生します(クライアントが明示的に接続を終了しない場合)。

public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled) 
{ 
    if (stopCalled) 
    { 
     Console.WriteLine(String.Format("Client {0} explicitly closed the connection.", Context.ConnectionId)); 
    } 
    else 
    { 
     Console.WriteLine(String.Format("Client {0} timed out .", Context.ConnectionId)); 
    } 

    return base.OnDisconnected(); 
} 

あなたがここに見ることができるように。明示的に切断された場合(stopCalledがtrue)、クライアントは確実に切断され、再接続は発生しません。

クライアントが実際に切断されていない場合は、接続解除後に再接続が発生する可能性があります。

チェックhereフォア詳細

+1

はそれが私が推測する問題だった、我々はOnReconnectedイベント上の任意のコントロールをしなかった、答えをいただき、ありがとうございます。 –

+1

接続IDの一意性を確認してください(保持している場合)。あなたが切断されずに再接続が発生した場合、重複したレコードがある可能性があります。ここをクリックhttp://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections –

関連する問題