Ich hatte ein ähnliches Problem diese Woche, außer dass der Code in .done() nie ausgeführt wurde. Ich habe die Protokollierung aktiviert und es wurde nie etwas protokolliert. Beim Überprüfen der Browserkonsole gab es keine Fehler. In den Dev Tools des Browsers sah ich, dass es keine Netzwerkaktivität gab, als ich start() anrief. Ich bestätigte, dass der Proxy, der von $ .connection.myhubclass zurückgegeben wurde, alle meine Methoden auf ihm hatte, also wusste ich, dass es mit dem Server sprechen konnte und dass der serverseitige Code richtig eingerichtet wurde.
Nachdem ich den Code und die Dokumentation immer und immer wieder gelesen hatte, war ich überzeugt, dass ich nichts falsch gemacht habe. SignalR ist so einfach, dass es ziemlich schwer ist, es falsch zu machen, wenn man den Beispielen folgt. Ich schlug lange auf den Schreibtisch und versuchte, das herauszufinden.
Dann bemerkte ich, dass es funktionieren würde, wenn ich SignalRs Startmethode von der Konsole aus ausführen würde. Das hat mich dazu gebracht zu glauben, dass es versuchte, die Verbindung zu früh zu starten. Ich löste meine Probleme, die durch den Initialisierungscode von diesem Wechsel:
$.connection.hub.start().done(function() {
//Do interesting stuff
});
Um dies:
setTimeout(function() {
$.connection.hub.start().done(function() {
//Do interesting stuff
});
}, 5000);
Ich bin sicher, dass ich diese Verzögerung von 5 Sekunden bis etwas reduzieren kann kürzer, aber die zusätzliche Zeit erschienen Was benötigt wurde, um den Browser für die Erstellung der Verbindung bereit zu machen. Sobald diese Verzögerung eingetreten war, funktionierte die Protokollierung, die Verbindung wurde hergestellt, die Server-Seite OnConnected() lief und done() wurde auf dem Client ausgeführt.
Nachdem ich das herausgefunden hatte, überprüfte ich die Reihenfolge meiner Javascript-Ladevorgänge und dachte, dass ich vielleicht etwas außer Betrieb geladen habe, aber die Reihenfolge stimmt mit den SignalR-Beispielen. Ich lade jQuery, SignalR,/signager/Hubs, dann meine Skriptdatei, die alles initialisiert.
Ich bin offen für Vorschläge, warum diese Verzögerung benötigt wurde. Ich sehe es in keinem der Dokumente, also weiß ich, dass es etwas sein könnte, was ich getan habe. Zum Glück für diese Seite ist eine kleine Verzögerung vor dem Start von SignalR kein Problem.
Haben Sie jemals herausgefunden, was das ist? Ich denke, ich habe das gleiche erlebt. – parliament
Ich kann mich ehrlich gesagt nicht erinnern, ich erinnere mich, dies zu beheben: http://stackoverflow.com/questions/15782281/signalr-event-becomes-intermittent-when-deployed-to-a-server/15811049#15811049 vielleicht sind sie verbunden ? – 4imble