Udostępnij przez


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

Korzystając z WebSocketów i skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • Podczas korzystania z wielu serwerów bez użycia mechanizmu przypisywania sesji, połączenie może rozpocząć się na jednym serwerze, a następnie zostać przełączone 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 wysłanie żądania do serwera po negocjacji trwa zbyt długo, serwer:

    • Usuwa identyfikator.
    • Zwraca kod 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

Korzystając z WebSocketów 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 w Startup, lub wymusza HTTPS za pośrednictwem reguły przepisywania 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).
  • Dodaj oczekiwane źródła 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 Azure SignalR, zmniejsz rozmiar tokenu, dostosowując roszczenia wysyłane za pośrednictwem usługi.
.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 został rozłączony w takich przypadkach, zbierz dzienniki z klienta i serwera.

Dodatkowe zasoby