Pregunta

¿Hay alguna forma de dejar de ser el servidor de votación en SignalR? Quiero dejar de ser el servidor de votación si se produce un error. Los centros de votación se inician con $.connection.hub.start(), así que supuse que podría detenerse con $.connection.hub.stop() o algo así. Pero no parece funcionar, las encuestas continúan incluso después de llamar stop(). ¿Hay otra forma de dejar de encuestar?

<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>
¿Fue útil?

Solución

Si está utilizando centros, puede detener la conexión del concentrador:

$.connection.hub.stop();

Otros consejos

En primer lugar, ¿estás seguro de que es necesario? Si se produce un error de comunicación, obviamente, desea volver a intentarlo.

Sin embargo, busqué el código fuente y quiero decir que especialmente en el controlador de errores no es posible llamar .stop() dominio. Respectivamente, no tiene ningún efecto porque la función posterior del controlador está terminada que la comunicación se reinicia automáticamente dos segundos después.

Ver jQuery.signalr.js (línea 340):

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

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

Encontré una solución alternativa: en la función de controlador, arroje una excepción, que causa que esa encuesta no se reinicializa:

connection.error(function (error) { //$.connection.hub.error()
  $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
  throw "Close SignalR connection";
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top