Rozwiązywanie problemów z błędami połączenia
Ta sekcja zawiera pomoc dotyczącą błędów, które mogą wystąpić podczas próby nawiązania połączenia z centrum ASP.NET Core SignalR .
Kod odpowiedzi 404
W przypadku korzystania z obiektów WebSocket i skipNegotiation = true
WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
W przypadku korzystania z wielu serwerów bez sesji sticky połączenie może być uruchamiane na jednym serwerze, a następnie przełączać się na inny serwer. Drugi serwer nie zna poprzedniego połączenia.
Sprawdź, czy klient nawiązuje połączenie z poprawnym punktem końcowym. Na przykład serwer jest hostowany w witrynie
http://127.0.0.1:5000/hub/myHub
, a klient próbuje nawiązać połączenie z usługąhttp://127.0.0.1:5000/myHub
.Jeśli połączenie używa identyfikatora i trwa zbyt długo, aby wysłać żądanie do serwera po negocjowaniu, serwer:
- Usuwa identyfikator.
- Zwraca wartość 404.
Kod odpowiedzi 400 lub 503
W przypadku następującego błędu:
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.
Ten błąd jest zwykle spowodowany przez klienta używającego tylko transportu protokołu WebSocket, ale protokół WebSocket nie jest włączony na serwerze.
Kod odpowiedzi 307
W przypadku korzystania z obiektów WebSocket i skipNegotiation = true
WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307
Ten błąd może również wystąpić podczas żądania negocjowania.
Typowa przyczyna:
- Aplikacja jest skonfigurowana do wymuszania protokołu HTTPS przez wywołanie
UseHttpsRedirection
metody lubStartup
wymusza protokół HTTPS za pośrednictwem reguły ponownego zapisywania adresów URL.
Możliwe rozwiązanie:
- Zmień adres URL po stronie klienta z "http" na "https".
.withUrl("https://xxx/HubName")
Kod odpowiedzi 405
Kod stanu HTTP 405 — Niedozwolona metoda
- Aplikacja nie ma włączonego mechanizmu CORS
Kod odpowiedzi 0
Kod stanu HTTP 0 — zwykle problem z mechanizmem CORS , nie podano żadnego kodu stanu
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).
- Dodawanie oczekiwanych źródeł do
.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').
- Dodaj
.AllowCredentials()
do zasad MECHANIZMU CORS. Nie można użyć.AllowAnyOrigin()
lub.WithOrigins("*")
z tą opcją
Kod odpowiedzi 413
Kod stanu HTTP 413 — Za duży ładunek
Jest to często spowodowane posiadaniem tokenu dostępu powyżej 4k.
- W przypadku korzystania z usługi platformy Azure SignalR zmniejsz rozmiar tokenu, dostosowując oświadczenia wysyłane za pośrednictwem usługi za pomocą polecenia:
.AddAzureSignalR(options =>
{
options.ClaimsProvider = context => context.User.Claims;
});
Przejściowe błędy sieci
Przejściowe błędy sieci mogą zamknąć SignalR połączenie. Serwer może interpretować zamknięte połączenie jako bezproblemowe rozłączenie klienta. Aby uzyskać więcej informacji na temat tego, dlaczego klient odłączony w tych przypadkach zbiera dzienniki z klienta i serwera.