Verbindung muss gestartet werden, bevor Daten gesendet werden können. Nennen .start() vor .send()
Ich habe den folgenden code zum aufrufen einer Methode, die auf hub-von der client-Seite
var app = $.connection.myHub;
$.connection.hub.start().done(function () {
$('#mylink').click(function (e) {
e.preventDefault();
app.server.myMethod();
});
).fail(function (error) {
console.log('Invocation of start failed. Error: ' + error)
});
Dieser code funktioniert gut, aber nach einige Zeit ist vergangen, als ich auf den link wieder, bekomme ich die folgende Fehlermeldung
SignalR: Connection must be started before data can be sent. Call .start() before .send()
-
Den link click-Ereignis ist bereits in der
start().done()
also, wenn die Verbindung nicht gestartet ist, wie wird der event-handler link-Klick ist auch ausgelöst. -
Wenn dies aufgrund von Verbindungs-timeout, wie kann ich die Ausnahme behandeln und leiten den Benutzer auf die login-Seite.
-
Warum wird der code innerhalb der
.fail()
nicht ausgeführt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Empfohlene Lektüre: Verbindung Lebensdauer Veranstaltungen in SignalR
Dies ist meine Theorie über das, was passiert. Können Sie es bestätigen, indem Sie auf client-Seite-Anmeldung - hinzufügen
$.connection.hub.logging = true;
vorstart()
nennen..fail()
wird nicht ausgeführt.Aber nachdem die Verbindung hergestellt ist, kann es für kurze oder längere Unterbrechungen der Verbindung. Der Client versucht, erneut zu verbinden, die für einige Zeit (disconnect timeout) und wenn nicht erfolgreich, werde es aufgeben und Sie müssen Sie rufen Sie
.start()
wieder (indisconnected
handler zum Beispiel).Durch den Umgang mit 'getrennt' event
$.- Verbindung.hub.getrennt(function() {});