2015-09-28 48 views
0

我有一個自己託管的信號中心和兩種類型的客戶端連接到它。保持連接活着以正確的方式從c#客戶端

  • Web應用程序:我可以保持連接狀態,當你看到下面使用斷開事件:

    $(function() { 
        $.connection.hub.url = "http://localhost:8080/signalr"; 
    
        // Declare a proxy to reference the hub. 
        var priceHub = $.connection.uTHub; 
    
        $.connection.hub.start(); 
    
        $.connection.hub.disconnected(function() { 
         setTimeout(function() { 
          $.connection.hub.start(); 
         }, 2000); // Restart connection after 2 seconds. 
        }); 
    }); 
    
  • 的Windows服務:

    hubConnection = new HubConnection("http://localhost:8080/signalr", "source=" + feed, useDefaultUrl: false); 
        priceProxy = hubConnection.CreateHubProxy("UTHub"); 
        hubConnection.Start().Wait(); 
    

在windows服務,如何我可以處理斷開的事件(2秒後重新啓動連接行爲),正如我在Web應用程序中使用的那樣?

由於提前,

+0

http://www.asp.net/signalr/overview/guide-to-the-api/handling-connection-lifetime-events#keepalive這個邏輯已經在你的問題中提及過了。你試圖解決什麼? – Artiom

+0

是的我知道我在我的集​​線器的Web應用程序客戶端中擁有該邏輯。我需要與我的集線器的Windows服務客戶端相同的邏輯。 – anilca

+0

答案 - 這是不可能的。 – Artiom

回答

4

這就是我需要:

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client#connectionlifetime

 hubConnection.Closed +=() => { 
      connected = false; 
      while (!connected) 
      { 
       System.Threading.Thread.Sleep(2000); 
       hubConnection = new HubConnection("http://localhost:8080/signalr", "source=" + feed, useDefaultUrl: false); 
       priceProxy = hubConnection.CreateHubProxy("UTHub"); 
       hubConnection.Start().Wait(); 
       connected = true; 
      } 
     }; 
+1

你不需要在那裏嘗試一下嗎? –

0

執行自定義邏輯,當盤客戶端斷開連接是覆蓋在輪轂類ondisconnected方法,像這樣:

public override Task OnDisconnected(bool stopCalled) 
    { 
     // your custom code here... 
     return base.OnDisconnected(stopCalled); 
    } 
+0

是的,但我希望我的客戶端在斷開連接時自行重新連接到集線器。我認爲這不是我的問題的答案。 – anilca

+0

在客戶端發出任何請求並且客戶端斷開連接之前,服務器無法連接到客戶端。所有的樞紐班可以爲你提供的是給一個機會來了解一些客戶已斷開連接。 – SHM

+0

是的,我需要我的客戶端連接到服務器。我如何在Windows服務中做到這一點? – anilca