Тайм-аут сервера 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, поэтому до истечения времени ожидания он отправит одно сообщение, и соединение будет активным.

Другие вопросы по тегам