2015-09-25 10 views
5

我們可以爲不同的事情創建多個集線器,並且連接到每個集線器,我們可以創建多個客戶端集線器並共享連接,以便與所有集線器。現在,問題出現了,集線器連接方法沒有在每個集線器服務器端代碼上引發。當我在多個集線器中使用共享連接時,OnConnected方法不被稱爲SignalR

public class Hub1 : Hub 
{ 
     public override Task OnConnected() 
     { 
      return base.OnConnected(); 

     } 
} 

public class Hub2 : Hub 
{ 
     public override Task OnConnected() 
     { 
      return base.OnConnected(); 

     } 
} 

讓的說,在客戶端我創建了HUB1和HUB2與兩個樞紐定義客戶端方式,那麼只有集線器onConnected方法被調用服務器端的一個。如果我使用單獨的連接在客戶端創建集線器,則會調用OnConnected方法。因此,如果我想爲每個集線器使用相同的連接,還有其他解決方法,但還想提高單獨集線器的連接事件。

回答

5

我測試了兩個集線器上的調試點,並且在兩個集線器上都調用OnConnected,只要您有兩個集線器的訂閱。

在這裏看到:Can I debug OnConnected method in SignalR Hub?

長話短說: 通過設計,如果你沒有任何訂閱到集線器,然後JavaScript客戶端無法從服務器獲取任何消息,因此OnConnected韓元不會打電話。

編輯

here的注意部分:

注:對於JavaScript客戶端必須調用start方法來建立連接之前註冊的至少一個事件 處理。

查看更多鏈接。

+0

即使連接在集線器之間共享? –

+1

是的。這是當前的實施。如果客戶端沒有訂閱集線器的任何事件,則不需要創建永遠不會被使用的集線器對象。這是javascript客戶端的行爲。 .NET客戶端將始終獨立於訂閱事件或不創建連接。我將編輯答案以提供更多信息。 – DDan

+0

這很奇怪,但很好。 – Jacob

相關問題