$ .Connection.hub.disconnected должен вызываться через 30 секунд после того, как клиент не сможет разговаривать с сервером.
Он пытается подключиться бесконечно
Гендель все события
$ .connection.hub.connectionSlow = function () {console.log ("[" + (новая дата ()). toString () + "] SignalR Connection Slow");};
$ .connection.hub.reconnecting = function () {console.log ("[" + (новая дата ()). toString () + "] Переподключение соединения SignalR"); };
$ .connection.hub.reconnected = function () {console.log ("[" + (новая дата ()). toString () + "] SignalR Connection Reconnected");};
$ .connection.hub.disconnected = function () {console.log ("[" + (новая дата ()). toString () + "] Подключение SignalR отключено"); };
$ .connection.hub.stateChanged = функция () {console.log ("[" + (новая дата ()). toString () + "] SignalR StateChange");
$ .connection.hub.logging = true;
Подключиться к Пуску
Выключите Wi-Fi или отключите интернет
Это единственное, что отображается в журналах, событие отключения никогда не запускается.
В Chrome
Ошибка загрузки XHR : POST "
В IE11
[18:02:51 GMT-0700 (US Mountain Standard Time)] SignalR: Открытие длинный запрос опроса на " HTTP: // ххххххх / signalr / переподключение транспорт = longPolling & ClientProtocol = 1,5 & connectionToken = cvKizCrqc3saz0gQuNvTaMeB91jkPeVOP4cBz3ZDgzdsi7iQm4aC25dBr% 2BxjWwEetYS8PEh0jlVuu9Q0UL9RUzBD4klYw3EBhYgP10p0wcBccPYY0BW% 2BSH4EyPxff2AaSBsAfrqsJBiUTrbA5DV7Jw% 3D% 3D & connectionData =% 5B% 7B% 22name% 22% 3A% 22realtimeinboxhub% 22% 7D% 5D '.
SCRIPT7002: XMLHttpRequest: ошибка сети 0x2ee7, не удалось завершить операцию из-за ошибки 00002ee7.
Обратите внимание, что мы не используем веб-сокеты
С фреймами Forever мы видим это, но на клиенте по-прежнему не возникает события отключения.
[18:30:15 GMT-0700 (Горное стандартное время США)] SignalR: Поддержание активности пропущено, соединение может быть мертвым / медленным.
[18:30:22 GMT-0700 (Горное стандартное время США)] SignalR: Истекло время ожидания активности. Уведомление транспорта о потере связи.
[18:30:24 GMT-0700 (US Mountain Standard Time)] SignalR: Обновление IFrame ЦСИ к " HTTP: // ххххх / signalr / переподключение транспорт = foreverFrame & groupsToken = vdn69Z4r7I2HFeyiTwC7V06mYy4t0P67Y5yDr9HGQjhISisu0% 2B484DIW9G0eV33yAqp1TQ8vgH4L07UQ3Uor% 2BAC2FGNsLrH7OEyigVMVsocgSvSzQUmzpStCDvNG2ir3qiOl4ITLOuIKQREA% 2B% 2BUNRg% 3D% 3D & MESSAGEID = S-0% 2C3979 & ClientProtocol = 1,5 & connectionToken = KlY0U0ZuDWgNrsUdhGWsyO2% 2FKk1ltTvvDI25ncWYV% 2FZN% 2BSR9MufllEMiDSZXjNAkHy% 2Be21M7dUXx8% 2BSOb% 2BqoTf2ZUA3c% 2FStYpbJSCv6XBkgKgDKrQd9hKZoW1KTTlVEWN7g9VClztVn1N2Y4FBBLFA% 3D% 3D & connectionData =% 5B% 7B% 22name% 22% 3A% 22realtimeinboxhub% 22% 7D% 5D & TID = 2 & frameId = 1 '.
[18:30:24 GMT-0700 (Горное время США)] SignalR: Фрейм iframe навсегда загрузился и больше не получает сообщения.
К вашему сведению, я подключаюсь с другого компьютера, чем сервер, в отличие от последнего человека, у которого была такая же проблема.
Не существует надежного метода определения того, что кабель отключен, и ожидающие HTTP-запросы могут не быть прерваны, если это произойдет. Транспорт Longpolling - единственный транспорт, у которого нет поддержки (мы пытались добавить его, и он вызвал больше проблем, чем решил). Существует тайм-аут опроса в 120 секунд, после которого клиент должен попробовать повторить опрос, который должен завершиться ошибкой, потому что новые HTTP-запросы, как вы заметили, не могут быть выполнены. Это должно привести к повторному подключению. Кроме того, повторные подключения не являются неопределенными - если клиент не может повторно подключиться в течение тайм-аута, соединение будет закрыто.
@moozzyk Спасибо за быстрый ответ! Я ценю это.
Я полностью понимаю, что вы говорите, но это не то, что я вижу, вот журнал signalR, пытающийся повторно подключиться в течение 10 минут.
Вот код, который я использую для создания журнала
$.connection.hub.connectionSlow = function(){console.log("[" + (new Date()).toString() + "] SignalR Connection Slow");};
$.connection.hub.reconnecting = function(){console.log("[" + (new Date()).toString() + "] SignalR Connection Reconnecting"); };
$.connection.hub.reconnected = function(){console.log("[" + (new Date()).toString() + "] SignalR Connection Reconnected");};
$.connection.hub.disconnected = function(){console.log("[" + (new Date()).toString() + "] SignalR Connection Disconnected"); };
$.connection.hub.stateChanged = function () { console.log("[" + (new Date()).toString() + "] SignalR StateChange") };
$.connection.hub.logging = true;
RealTimeInboxConect();
function RealTimeInboxConect() {
console.log("[" + (new Date()).toString() + "] SignalR RealTimeInboxConect");
var defered = $.connection.hub.start({ transport: ['foreverFrame', 'serverSentEvents'] });
defered.fail(function () {
console.log("[" + (new Date()).toString() + "] SignalR Failed to start Attempt:");
setTimeout(function () {
RealTimeInboxConect();
}, 1000);
});
defered.done(function () {
console.log("Done Connectiong");
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
}
Тогда foreverFrame нужно исследовать. Клиенту следует отказаться от повторного подключения, если он не смог восстановить соединение в течение времени ожидания / окна повторного подключения.
Проблема в том, что это не только foreverFrame, sse и long polling, вот еще несколько журналов для каждого из них.
Обратите внимание: все, что я делаю для воспроизведения, - это отключение Wi-Fi.
Я новичок в Gethub, извините, если это неправильное место, но что здесь происходит с этой формой?
Мне нужен способ сообщить пользовательскому интерфейсу, что соединение signalR остановлено, проблема в том, что, например, пул приложений, в котором находится концентратор, останавливается, он просто переходит в бесконечный цикл и без вызова какого-либо клиентского кода, чтобы сообщить мне, что соединение сломан.
Есть предложения о том, как сообщить о статусе подключения к пользовательскому интерфейсу?
Коллега наконец указал мне на проблему, которую я переопределял обработчики вместо того, чтобы передавать им свою функцию.
$ .connection.hub.disconnected = function () {console.log ("[" + (новая дата ()). toString () + "] Подключение SignalR отключено"); };
против
$ .connection.hub.disconnected (function () {console.log ("[" + (новая дата ()). toString () + "] Подключение SignalR отключено");});
Эта проблема была закрыта в рамках устранения проблемы, как описано в https://blogs.msdn.microsoft.com/webdev/2018/09/17/the-future-of-asp-net-signalr/. Если вы все еще сталкиваетесь с этой проблемой, не стесняйтесь повторно открыть и оставить комментарий, чтобы сообщить нам об этом! Нам все еще интересно услышать от вас, отставание только что стало немного большим, и нам пришлось провести большую очистку, чтобы снова справиться с ситуацией. Спасибо за ваш отзыв!
Самый полезный комментарий
Коллега наконец указал мне на проблему, которую я переопределял обработчики вместо того, чтобы передавать им свою функцию.
$ .connection.hub.disconnected = function () {console.log ("[" + (новая дата ()). toString () + "] Подключение SignalR отключено"); };
против
$ .connection.hub.disconnected (function () {console.log ("[" + (новая дата ()). toString () + "] Подключение SignalR отключено");});