2015-09-25 26 views
5

Możemy tworzyć wiele koncentratorów dla różnych rzeczy, a aby połączyć się z każdym koncentratorem, możemy utworzyć wiele koncentratorów po stronie klienta z połączeniem do współużytkowania, aby jedno połączenie było wykonane dla wszystkich huby. Teraz pojawia się problem polegający na tym, że metoda hub onconnected nie podnosi się po każdym kodzie strony serwera centralnego.Metoda OnConnected nie nazywane SignalR gdy korzystam z połączenia współdzielonego w wielu koncentratorach

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

     } 
} 

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

     } 
} 

powiedzmy, po stronie klienta i stworzyć hub1 i hub2 z metod po stronie klienta określonych na obu piastach, to tylko jeden z węzłów metoda onConnected dostaje zwanych po stronie serwera. Jeśli utworzę koncentratory po stronie klienta z oddzielnymi połączeniami, wywoływana jest metoda OnConnected. Tak więc istnieje jakakolwiek inna praca wokół, jeśli chcę korzystać z tego samego połączenia dla każdego koncentratora, ale także chciałbym podnieść na Connected zdarzenia oddzielnych koncentratorów.

Odpowiedz

5

Przetestowałem to, umieszczając punkt debugowania na obu koncentratorach, i OnConnected nie jest wywoływany w obu koncentratorach, o ile masz jakiekolwiek subskrypcje do obu koncentratorów.

Zobacz tutaj: Can I debug OnConnected method in SignalR Hub?

Krótko mówiąc: Zgodnie z projektem, jeśli nie masz żadnych subskrypcji do piasty, klient javascript nie można uzyskać żadnych wiadomości z serwera więc OnConnected wonów daj się wezwać.

EDIT

Zobacz here część Uwaga:

Uwaga: W przypadku klientów JavaScript trzeba zarejestrować przynajmniej jedno zdarzenie obsługi przed wywołaniem metody Start, aby nawiązać połączenie.

Zobacz więcej pod linkiem.

+0

Nawet jeśli połączenie jest współdzielone między koncentratory? –

+1

Tak. To jest obecna implementacja. Jeśli klient nie subskrybuje żadnego z wydarzeń w hoście, nie ma potrzeby tworzenia obiektu (obiektów) koncentratora, który i tak nigdy nie zostanie użyty. Jest to zachowanie w przypadku klienta javascript. Klient .NET zawsze tworzy połączenie niezależnie od subskrypcji zdarzeń lub nie. Będę edytować odpowiedź, aby dostarczyć więcej informacji. – DDan

+0

To dziwne, ale dobry punkt. – Jacob