Как остановить опрос в SignalR?

Есть ли способ остановить сервер опроса в SignalR? Я хочу остановить сервер опроса, если возникла ошибка. Центры опроса начинаются с $.connection.hub.start(), поэтому я предположил, что его можно остановить с помощью $.connection.hub.stop() или что-то в этом роде. Но, похоже, это не работает, опрос продолжается даже после вызова stop(). Есть ли другой способ остановить опрос?

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

Ответы

Ответ 1

Если вы используете концентраторы, вы можете остановить соединение концентратора:

$.connection.hub.stop();

Ответ 2

Во-первых, вы уверены, что это необходимо? Если возникает ошибка связи, то, очевидно, вы хотите повторить попытку.

Однако я просмотрел исходный код, и я имею в виду, что особенно в обработчике ошибок невозможно вызвать команду .stop(). Соответственно, это не имеет никакого эффекта, потому что после того, как функция обработчика закончена, связь автоматически повторно инициализируется через 2 секунды после.

См. jquery.signalR.js(строка 340):

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

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

Я нашел одно обходное решение: в функции обработчика выдает исключение, из-за чего этот опрос не повторно инициализируется:

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