2016-07-02 11 views
0

私は、WPFでsignalRを使用してチャットアプリケーションを開発しています。signalRサーバー(WPF)が誤って停止した場合、どのクライアントをすべてログアウトできますか?

1)WPFクライアント

2)WPFサーバー

サーバは、時間の任意の時点で誤って停止した場合、私は、クライアント側で再度ログイン画面を切断し、表示したい:それは2つのプロジェクトがあります。ここで

は、私は、サーバーウィンドウを閉じるに行っているコードです:

private void ServerMainWindow_Closed(object sender, CancelEventArgs e) 
    { 
     if (SignalR != null) 
     { 
      SignalR.Dispose(); 
     } 
    } 

私はここからデータベースに関連するものを扱うことができますが、どのように私は、クライアントを管理することができますか?

ありがとうございました。

答えて

1

サーバー内:いずれかのプロキシでカスタムメッセージを「切断」として送信します。

クライアントの場合:WPF signalRクライアントにはonDisconnectが組み込まれていないため、そのカスタムメッセージを確認してログインフォームにリダイレクトします。第二の窓負荷に

  1. 開始部分:第二のウィンドウ上

    Get_App_Info_Proxy.On<string>("IO_Stay_Active", (responseHeartBeat) => OnReceiveDataHeartBeat(responseHeartBeat)); 
    
  2. 呼び出し部分は、ちょうどその一度のために私の場合のために、できるサーバが取るべき負荷に基づいて定期的に確認してください一分。第二のウィンドウ上の部分を受信

    private void hbeatTimer_Tick(object sender, EventArgs e) 
    { 
        Get_App_Info_Proxy.Invoke("IO_Stay_Active"); 
    } 
    
  3. :応答のための

    private void OnReceiveDataHeartBeat(string responseHeartBeat) 
    { 
        if (responseHeartBeat == "IO_101") // I would prefer custom code programmed in server 
         { 
           Login loginform = new Login(); // redirecting first form 
           loginform.Show(); 
         } 
    } 
    
+0

おかげで、私は代わりに、サーバーからカスタムメッセージを送信する他のいくつかのアプローチを持っていると思います。 – NewbieCoder

+1

これが最良の方法です。 Signalrクライアントは、20秒後までサーバインスタンスが叫んでいるのを知りません。クライアントに明示的にメッセージを送信すると高速になります。 – xleon

+0

@Arulこれのためのサンプルコードを提供していただけますか? – NewbieCoder

関連する問題