다음을 통해 공유


연결 오류 문제 해결

이 섹션에서는 ASP.NET Core SignalR 허브에 대한 연결을 설정할 때 발생할 수 있는 오류에 대한 도움말을 제공합니다.

응답 코드 404

사용할 때 WebSocket 및 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에 연결을 시도하고 있습니다.

  • 연결에서 ID를 사용하고 협상 후 서버에 요청을 보내는 데 너무 오래 걸리는 경우 서버는 다음을 수행합니다.

    • ID를 삭제합니다.
    • 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.

이 오류는 일반적으로 WebSocket 전송만 사용하는 클라이언트에 의해 발생하지만 WebSocket 프로토콜은 서버에서 사용하도록 설정되지 않습니다.

응답 코드 307

사용할 때 WebSocket 및 skipNegotiation = true

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

이 오류는 협상 요청 중에 발생할 수도 있습니다.

일반적인 원인:

  • 앱은 호출 UseHttpsRedirectionStartup하여 HTTPS를 적용하도록 구성되거나 URL 다시 쓰기 규칙을 통해 HTTPS를 적용합니다.

가능한 해결 방법:

  • 클라이언트 쪽의 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').
  • CORS 정책에 .AllowCredentials()을 추가합니다. 이 옵션과 함께 .AllowAnyOrigin() 또는 .WithOrigins("*") 사용할 수 없습니다

응답 코드 413

Http 상태 코드 413 - 너무 큰 페이로드

이는 4k를 넘는 액세스 토큰이 있기 때문에 발생하는 경우가 많습니다.

  • Azure SignalR 서비스를 사용하는 경우 다음을 사용하여 서비스를 통해 전송되는 클레임을 사용자 지정하여 토큰 크기를 줄입니다.
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

일시적인 네트워크 오류

일시적인 네트워크 오류로 SignalR 연결이 닫힐 수 있습니다. 서버는 닫힌 연결을 정상적인 클라이언트 연결 끊김으로 해석할 수 있습니다. 이러한 경우 클라이언트의 연결이 끊어진 이유에 대한 자세한 내용은 클라이언트와 서버에서 로그를 수집합니다.

추가 리소스