2012-12-10 19 views
6

Ich habe Probleme mit OnConnected und OnDisconnected Überschreibungen in meinem Hub nicht feuern.SignalR OnConnected und OnDisconnected nicht feuern

Für Replikationszwecke, ich habe einen sehr einfachen Hub bekommt:

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()); 
    } 
} 

Und eine aspx Seite:

<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> 

Ich bin mit jQuery 1.6.4 und SignalR 1.0.0-Alpha2. Die clientseitig verbundenen und nicht verbundenen Methoden werden nicht ausgeführt. Und wenn ich einen Breakpoint in OnConnected oder OnDisconnected setze, treffen die Breakpoints nicht.

Die Verbindung wird hergestellt, da meine TestMethod-Aufrufe ok sind und ich eine Verbindungs-ID von signalRs ausgehandeltem Anruf zurückbekomme.

Ich bin sicher, ich vermisse etwas Einfaches.

Vielen Dank im Voraus.

Antwort

11

Ihre Client-Handler sollte wohl so aussehen:

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

Danke für die Antwort, in diesem Fall ist die Art, wie ich es tue, korrekt, da es kein Handler als solcher ist, sondern eine Definition einer Methode, die der Server aufrufen kann. Trotzdem danke. :) – DavidGouge

+2

Ich bin mir ziemlich sicher, dass ich recht habe! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

Es funktioniert nicht für mich. https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

es herausgefunden. Ich rufe die Methoden auf dem Server-Objekt, anstatt die Kunden:

$.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.client.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

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

sein sollte, so es so aussieht, wenn signalR etwas für die Aufgabe nicht hat, die innerhalb des OnDisconnected oder OnConnected , dann werden sie nicht gefeuert. Was macht Sinn.

+4

Sie sollten @ Duncan Antwort als gut markieren, da er Recht hatte! – billy

+1

Die richtige Antwort ist @ Duncan, da er es wie eine halbe Stunde früher gepostet hat! –

+3

Ja, danke @Matei_Radu dafür, dass du auf eine 3+ Jahre alte Frage so schnell reagiert hast. Wo wäre diese Seite ohne dich? – DavidGouge

5

Es stellt sich auch heraus, dass Sie in einem Skript mindestens einen Client-Callback für Ereignisse definieren müssen, die auf dem Hub ausgelöst werden sollen. Seien Sie vorsichtig damit, wenn OnConnected und OnDisconnected erwartet werden.

+0

Werfen Sie auch einen Blick auf diese https://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signal –

Verwandte Themen