Тайм-аут сервера ASP.NET CORE 2.1 при отладке
"Ошибка: истекло время ожидания сервера без получения сообщения от сервера.".
Я пытаюсь отладить некоторый код на стороне сервера, и пока я делаю это, клиент отключается менее чем за минуту.
Я только использую SignalR для общения с клиентами, пока без контроллеров.
Есть ли какие-либо настройки, которые могут отключить тайм-аут или, по крайней мере, сделать его длиннее, чем сейчас?
мой запуск Settings.json:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:26793",
"sslPort": 44386
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HTTPS_PORT": "44386"
}
},
"Api": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001;http://localhost:5000"
}
}
}
}
3 ответа
Благодаря Arhire Ionut
Вот как увеличить время ожидания клиента Javascript
hubConnection.serverTimeoutInMilliseconds = 100000; // 100 second
Подробнее здесь => https://github.com/aspnet/Docs/issues/6885
То, что @MahmoudFarhat упомянул в другом ответе, является правильным. Но также посмотрите на эту ссылку, а затем прочитайте мои комментарии.
Если 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();
отправить какое-то сообщение через некоторый временной интервал. Интервал времени меньше, чем serverTimeoutInMilliseconds, поэтому до истечения времени ожидания он отправит одно сообщение, и соединение будет активным.