2017-02-16 347 views
0

我有在SignalR客戶端中停止連接的惡意問題。SignalR客戶端HubConnection停止

這裏我們用我的代碼去。

我開始用簡單的方法連接

private void Initialize() 
    { 
     var hermesHubAddress = ConfigurationManager.AppSettings["HermesUrl"]; 
     _hubConnection = new HubConnection(hermesHubAddress) 
     { 
      Credentials = CredentialCache.DefaultCredentials 
     }; 

     _hubProxy = _hubConnection.CreateHubProxy("HermesHub"); 
     _hubProxy.On<Notification>("Notify", Recieve_Message); 
     _hubConnection.Start().Wait(); 
     _hubConnection.Error += HubConnectionOnError; 
     _hubConnection.StateChanged += HubConnectionOnStateChanged; 
    } 

然後當客戶端執行操作,關閉連接

public void Stop() 
    { 
     _hubConnection.Stop(); 
     _hubConnection.Dispose(); 
    } 

事件聽者發現連接狀態改變和調用的動作

private void HubConnectionOnStateChanged(StateChange stateChange) 
    { 
     if (stateChange.NewState == ConnectionState.Connected) 
     { 
      if (ConnectionEvent != null) 
       ConnectionEvent.Invoke(true); 
     } 
     else 
     { 

      if (ConnectionEvent != null) 
       ConnectionEvent.Invoke(false); 
     } 
    } 

一切工作正常,客戶端斷開連接,但當SignalR服務器廣播時以某種方式asts消息_hubProxy autoreconnect到服務器並獲得響應。

回答

0

如果有多條消息要發送,SignalR會嘗試將它們分組發送到一個有效負載中。這就是爲什麼M是一個數組(您可以在my post中找到更多關於SignalR協議的信息)。

SignalR不能只發送一個消息每輪詢。由於客戶端需要爲一次輪詢創建新的HTTP請求,因此輪詢可能非常慢。如果您收到的郵件比輪詢之間的時間間隔更快,如果您每次輪詢只發送一條郵件,並且您將開始丟失郵件,您將無法跟上。