이 섹션에서는 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
이 오류는 협상 요청 중에 발생할 수도 있습니다.
일반적인 원인:
- 앱은 호출
UseHttpsRedirection
Startup
하여 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 연결이 닫힐 수 있습니다. 서버는 닫힌 연결을 정상적인 클라이언트 연결 끊김으로 해석할 수 있습니다. 이러한 경우 클라이언트의 연결이 끊어진 이유에 대한 자세한 내용은 클라이언트와 서버에서 로그를 수집합니다.
추가 리소스
ASP.NET Core