Как увеличить время ожидания в ASP.NET Core SignalR v2.1?
Я пробую последнюю версию SignalR на ASP.NET Core 2.1. У меня работает базовое приложение, но оно довольно скоро истекает. Я вижу эту ошибку -
Ошибка: Соединение разорвано с ошибкой "Ошибка: истекло время ожидания сервера без получения сообщения от сервера.".
Где можно изменить настройки тайм-аута? Я попробовал документы здесь, но никакой информации о тайм-ауте там нет. Я работаю в среде разработки Windows 10 и использую клиент JavaScript.
Редактировать: вставка изображения после включения регистрации клиента.
Редактировать 2: Ссылка на страницу, содержащую тайм-ауты о старой версии SignalR.
3 ответа
Для людей, которые могут прийти сюда в будущем:
Вы можете найти решение здесь.
Но также посмотрите на эту ссылку, а затем прочитайте мои комментарии.
Если 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();
В startup.cs
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(60);
})
Следующее сработало для меня. Поместите приведенный ниже код в клиент Javascript.
// Connecting to the signalR
var connection = new signalR.HubConnectionBuilder().withUrl(huburl + hubname).build();
// Setting the connection timeout
connection.serverTimeoutInMilliseconds = 180000; // 3 mins