다음을 통해 공유


연결 오류 문제 해결

이 섹션에서는 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

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

일반적인 원인:

  • 앱은 Startup에서 UseHttpsRedirection을 호출하여 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 연결이 종료될 수 있습니다. 서버는 종료된 연결을 정상 클라이언트 연결 끊김으로 해석할 수 있습니다. 이러한 경우 클라이언트의 연결이 끊어진 이유에 대해 자세히 알아보려면 클라이언트 및 서버에서 로그를 수집합니다.

추가 리소스