2012-12-10 5 views
6

Mam problemy z nadpisaniami OnConnected i OnDisconnected w moim Hub nie wyzwalającym.SignalR OnConnected i OnDisconnected nie odpalają

Dla celów replikacji, mam bardzo prosty piasta:

public class OnlineHub : Hub 
{ 
    public void TestMethod() 
    { 
     var a = 1; 
    } 

    public override System.Threading.Tasks.Task OnConnected() 
    { 
     return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public override System.Threading.Tasks.Task OnDisconnected() 
    { 
     return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 

i stronę aspx:

<script type="text/javascript"> 
    $(function() { 
     $("#btn").click(function() { 
      $.connection.onlineHub.server.testMethod(); 
     }); 

     $.connection.onlineHub.server.connected = function (id, date) { 
      $("#results").append("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.server.disconnected = function (id, date) { 
      $("#results").append(("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.connection.start(); 
    }); 

</script> 

używam jQuery 1.6.4 i signalR 1.0.0-alpha2. Metody połączenia i rozłączenia po stronie klienta nie są wykonywane. A jeśli ustawię punkt przerwania w OnConnected lub OnDisconnected, punkty przerwania nie zostaną trafione.

Połączenie jest wykonywane, ponieważ mój TestMethod wywołuje ok i otrzymuję connectionId z połączenia negocjacyjnego signalR.

Jestem pewien, że brakuje mi czegoś prostego.

Z góry dziękuję.

Odpowiedz

11

Twoje koparki klient prawdopodobnie powinien wyglądać następująco:

$.connection.onlineHub.client.connected = function(){...} 
+0

Dzięki za odpowiedź, w tym przypadku sposób, w jaki to robię jest poprawny, ponieważ nie jest to program obsługi jako taki, ale definicja metody, którą może wywołać serwer. Mimo to dzięki. :) – DavidGouge

+2

Jestem prawie pewien, że mam rację! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

To nie działa dla mnie. https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

Zdobione. Byłem wywołanie metod na obiekcie serwera a nie klienta:

$.connection.onlineHub.server.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.server.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

powinny być

$.connection.onlineHub.client.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.client.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

Wygląda więc na to, czy signalR nie ma nic do tego zadania zdefiniowane w OnDisconnected lub OnConnected , więc nie zostaną zwolnieni. To ma sens.

+4

Należy oznaczyć odpowiedź @ Duncana jako dobrą, ponieważ miał rację! – billy

+1

Właściwa odpowiedź to @ Duncan, ponieważ opublikował ją pół godziny wcześniej! –

+3

Tak, dziękuję @Matei_Radu za bicie w taki szybki sposób na trzyletnim pytaniu. Gdzie byłaby ta strona bez Ciebie !? – DavidGouge

5

Okazuje się również, że w skrypcie należy zdefiniować co najmniej jedno wywołanie zwrotne klienta dla zdarzeń, które mają zostać podniesione na koncentratorze. Zachowaj ostrożność, gdy oczekiwane będą wywołania OnConnected i OnDisconnected.

+0

Zobacz też: https://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signalr –