2016-07-02 47 views
0

我正在開發一個WPF中使用signalR的聊天應用程序。湖中有兩個項目:如果signalR服務器(WPF)意外停止,如何註銷所有客戶端?

1)WPF客戶

2)WPF服務器

我想,如果服務器在任何時間點意外停止在客戶端再次斷開連接並顯示登錄界面。

這裏是代碼我已經關閉服務器窗口中完成:

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

我可以從這裏處理數據庫相關的東西,但我怎麼能管理客戶端?

感謝您的任何幫助。

回答

1

在服務器中:在任何一個代理服務器中將自定義消息發送爲「disconnect」。

在客戶端:檢查該自定義消息並重定向到登錄窗體,因爲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

相關問題