Nguon: Microsoft Learn · .NET 8.0

Khắc phục sự cố kết nối ASP.NET Core SignalR

Nguồn: ASP.NET Core SignalR connection troubleshooting

Phần này cung cấp trợ giúp với các lỗi có thể xảy ra khi cố gắng thiết lập kết nối đến một SignalR hub (trung tâm SignalR).

Mã phản hồi (Response code) 404

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

Nguyên nhân chung (tất cả cấu hình):

Khi sử dụng luồng negotiate mặc định (skipNegotiation = false):

Khi sử dụng WebSockets với skipNegotiation = true:

Mã phản hồi 400 hoặc 503

Với lỗi sau:

log
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.

Lỗi này thường do client chỉ sử dụng transport (giao thức truyền tải) WebSockets nhưng giao thức WebSocket chưa được bật trên server.

Mã phản hồi 307

Khi sử dụng WebSockets và skipNegotiation = true

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

Lỗi này cũng có thể xảy ra trong quá trình yêu cầu negotiate.

Nguyên nhân phổ biến:

Giải pháp có thể:

Mã phản hồi 405

HTTP status code (mã trạng thái HTTP) 405 - Method Not Allowed (Phương thức không được phép)

Mã phản hồi 0

HTTP status code 0 - Thường là vấn đề CORS, không có mã trạng thái nào được cung cấp

log
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).
log
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').

Mã phản hồi 413

HTTP status code 413 - Payload Too Large (Tải trọng quá lớn)

Nguyên nhân thường gặp là access token (token truy cập) vượt quá 4k.

csharp
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

Lỗi mạng tạm thời (Transient network failures)

Lỗi mạng tạm thời có thể đóng kết nối SignalR. Server có thể hiểu kết nối đã đóng như một client ngắt kết nối bình thường. Để biết thêm thông tin về lý do client bị ngắt kết nối trong những trường hợp này, hãy thu thập logs từ client và server.