Как увеличить время ожидания в ASP.NET Core SignalR v2.1?

Я пробую последнюю версию SignalR на ASP.NET Core 2.1. У меня работает базовое приложение, но оно скоро заканчивается. Я вижу эту ошибку -

Ошибка: соединение разорвано с ошибкой «Ошибка: время ожидания сервера истекло, а сообщение от сервера не получено».

Где можно изменить этот параметр тайм-аута? Я пробовал документы здесь, но информации нет про тайм-аут там. Я работаю в среде разработки Windows 10 и использую клиент JavaScript.

Изменить: вставка изображения после включения ведения журнала клиента.

введите описание изображения здесь

Изменить 2: ссылка на страница, содержащая тайм-ауты для более старой версии SignalR.


person Community    schedule 14.05.2018    source источник
comment
Я бы сначала включил ведение журнала клиента, чтобы понять, почему вы не получаете сообщения об активности,   -  person davidfowl    schedule 17.05.2018
comment
@davidfowl Я включил скриншот после включения ведения журнала. Я позволяю соединению бездействовать, не используя приложение в течение нескольких секунд   -  person    schedule 17.05.2018
comment
@davidfowl Я увеличил KeepAliveInterval в своем Startup, но не смог увеличить ServerTimeout - может ли это быть связано с этой настройкой?   -  person    schedule 17.05.2018
comment
Да, именно по этой причине... Почему вы увеличили настройку Keep Alive?   -  person davidfowl    schedule 18.05.2018
comment
Ой. Спасибо, что разъяснили! Это была моя вина, я хотел немного больше времени ожидания, чем по умолчанию, поэтому я попытался увеличить его, но увидел этот побочный эффект. Все еще пытаетесь найти способ увеличить время ожидания, какие-либо предложения? Единственное, что я нашел, было в signalr.js — var DEFAULT_TIMEOUT_IN_MS = 10 * 1000; но он недоступен снаружи для моего клиента.   -  person    schedule 18.05.2018
comment
@davidfowl Еще одна вещь - я отредактировал вопрос, добавив ссылку на документы предыдущей версии. Сохраняются ли в последней версии SignalR та же концепция и значения тайм-аута по умолчанию, поскольку я не вижу их в новых документах?   -  person    schedule 18.05.2018
comment
Конечно, ответ просто не меняйте тайм-ауты...? У него уже есть хорошие значения по умолчанию   -  person thab    schedule 18.05.2018
comment
Я хотел бы изменить тайм-ауты хотя бы во время разработки, а также хотел бы понять, как это сделать, если это возможно. Наличие значения по умолчанию не означает, что я не должен даже пытаться исследовать. Конечно, это сломалось, но я извлек из этого урок.   -  person    schedule 18.05.2018
comment
Измените его как на клиенте, так и на сервере   -  person davidfowl    schedule 22.05.2018
comment
вы нашли решение?   -  person Mahmoud Farahat    schedule 05.06.2018
comment
@MahmoudFarahat Я попробую это в начале следующей недели   -  person    schedule 09.06.2018
comment
@MahmoudFarahat это сработало для меня. Я выберу ответ по этой ссылке. Этот вопрос теперь будет дублироваться, но ответ был обновлен на прошлой неделе, поэтому я не мог найти его изначально.   -  person    schedule 11.06.2018
comment
Также читайте мои комментарии ниже   -  person xeiton    schedule 11.10.2018


Ответы (2)


Для тех, кто может приехать сюда в будущем:

Вот как увеличить время ожидания клиента Javascript

hubConnection.serverTimeoutInMilliseconds = 100000; // 100 second

Но также взгляните на эту ссылку, а затем прочитайте мои комментарии ниже:

Если сигнал signalR отключился, попробуйте снова установить соединение. Соединение могло прерваться по ряду других причин, в том числе из-за того, что пользователь переключал сети. Например, если пользователь использует мобильный телефон и подключен к домашнему/офисному Wi-Fi, но выходит из него, который затем подключается к сотовому соединению для передачи данных.

Для повторного подключения вы можете использовать следующее (для меня работает как шарм):

// re-establish the connection if connection dropped
connection.onclose(() => setTimeout(startSignalRConnection(connection), 5000));

где startSignalRConnection:

const startSignalRConnection = connection => connection.start()
  .then(() => console.info('Websocket Connection Established'))
  .catch(err => console.error('SignalR Connection Error: ', err));

и связь есть

const connection = new HubConnectionBuilder()
  .withUrl(connectionHub, options)
  .withHubProtocol(protocol)
  .build();
person xeiton    schedule 10.10.2018
comment
Вторая ссылка битая. - person Rafael Herscovici; 02.04.2019
comment
Да, к сожалению, эта ссылка больше не действительна. Я заменил эту ссылку другой полезной ссылкой. Надеюсь, это поможет. - person xeiton; 03.04.2019

в файле startup.cs

services.AddSignalR(hubOptions =>
            {
                hubOptions.EnableDetailedErrors = true;
                hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(60);
            })
person D.Oleg    schedule 05.12.2019