2011-11-29 12 views
15

C'è un modo per fermare il server di polling in SignalR? Voglio interrompere il polling del server se si verifica un errore. Gli hub di polling sono stati avviati con $.connection.hub.start(), quindi ho pensato che potesse essere interrotto con $.connection.hub.stop() o qualcosa del genere. Ma non sembra funzionare, il polling continua anche dopo aver chiamato stop(). C'è un altro modo per smettere di polling?Come interrompere il polling in SignalR?

<script type="text/javascript"> 

var chatHub = $.connection.chatHub; 
var connection = $.connection.hub; 

chatHub.addMessage = function (message) { 
     $('#messages').append('<li>' + message + '</li>'); 
    }; 

connection.error(function (error) { 
$('#messages').append('<li>' + "error connecting: closing connnection" + '</li>'); 
    connection.stop(); //This doesn't seem to work 
     }); 

connection.start(); 

</script> 

risposta

37

Se stai usando gli hub puoi fermare la connessione dell'hub:

$.connection.hub.stop(); 
+0

ha la sintassi modificata in $ .connection.hub.connection.stop ()? Questo è tutto ciò che funziona per me. – dove

+0

No non ha. Questo non ha cambiato il mio – davidfowl

+0

ovviamente, mi scuso per aver sprecato il tuo tempo, ora è il momento di leggere la differenza tra l'interruzione di una connessione su un particolare hub, $ .connection.myHub.stop() e sopra. ho un'idea di cosa, ma penso che installerò una sandbox, quindi lo so. – dove

2

In primo luogo, sei sicuro che sia necessario? Se si verifica un errore di comunicazione che ovviamente si desidera riprovare.

Tuttavia, ho esaminato il codice sorgente e voglio dire che soprattutto nel gestore degli errori non è possibile chiamare il comando .stop(). Rispettivamente non ha effetto perché dopo che la funzione del gestore è terminata, la comunicazione viene automaticamente reinizializzata due secondi dopo.

See jquery.signalR.js (linea 340):

$(instance).trigger("onError", [data]); 

window.setTimeout(function() { 
    poll(instance); 
}, 2 * 1000); 

ho trovato una soluzione: In funzione del gestore di un'eccezione, che causano tale sondaggio non viene reinizializzata:

connection.error(function (error) { //$.connection.hub.error() 
    $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>'); 
    throw "Close SignalR connection"; 
});