Поделиться через


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

В этом разделе содержатся сведения об ошибках, которые могут возникать при попытке установить подключение к центру 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 путем вызова UseHttpsRedirection в Startup, или принудительного выполнения 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 подключение. Сервер может интерпретировать закрытое подключение как корректное отключение клиента. Чтобы получить дополнительные сведения о том, почему в этих случаях клиент отключился, соберите журналы с клиента и сервера.

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