Устранение ошибок подключения

В этом разделе содержатся сведения об ошибках, которые могут возникать при попытке установить подключение к центру ASP.NET Core SignalR .

Код ответа 404

При использовании WebSockets и skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • При использовании нескольких серверов без липких сеансов подключение может начинаться на одном сервере, а затем переключаться на другой сервер. Другой сервер не знает о предыдущем подключении.

  • Убедитесь, что клиент подключается к правильной конечной точке. Например, сервер размещается в http://127.0.0.1:5000/hub/myHub и клиент пытается подключиться к http://127.0.0.1:5000/myHub.

  • Если подключение использует идентификатор и занимает слишком много времени для отправки запроса на сервер после согласования, сервер:

    • Удаляет идентификатор.
    • Возвращает значение 404.

Код ответа 400 или 503

Для следующей ошибки:

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 400

Error: Failed to start the connection: Error: There was an error with the transport.

Эта ошибка обычно вызвана клиентом, использующим только транспорт WebSockets, но протокол WebSocket не включен на сервере.

Код ответа 307

При использовании WebSockets и skipNegotiation = true

WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307

Эта ошибка также может произойти во время запроса переговоров.

Наиболее частая причина

  • Приложение настроено для принудительного применения HTTPS путем вызова UseHttpsRedirectionStartupили принудительного выполнения HTTPS с помощью правила перезаписи URL-адресов.

Возможное решение:

  • Измените URL-адрес на стороне клиента с "http" на "https". .withUrl("https://xxx/HubName")

Код ответа 405

Код состояния HTTP 405 — метод не разрешен

  • Приложение не включает CORS

Код ответа 0

Код состояния HTTP 0— обычно проблема CORS , код состояния не указан

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
  • Добавление ожидаемых источников в .WithOrigins(...)
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials').
  • Добавьте .AllowCredentials() в политику CORS. Не удается использовать .AllowAnyOrigin() или .WithOrigins("*") использовать этот параметр

Код ответа 413

Код состояния HTTP 413 — полезные данные слишком большие

Это часто вызвано наличием маркера доступа, который превышает 4 кб.

  • При использовании службы Azure SignalR уменьшите размер маркера, настроив утверждения, отправляемые через службу, с помощью:
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

Временные сбои сети

Временные сбои сети могут закрыть SignalR подключение. Сервер может интерпретировать закрытое подключение как корректное отключение клиента. Чтобы получить дополнительные сведения о том, почему клиент, отключенный в этих случаях , собирает журналы с клиента и сервера.

Дополнительные ресурсы