Udostępnij za pośrednictwem


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 lub Startupwymusza 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

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.

Dodatkowe zasoby