Řešení chyb připojení
Tato část obsahuje nápovědu k chybám, ke kterým může dojít při pokusu o navázání připojení k centru ASP.NET Core SignalR .
Kód odpovědi 404
Při použití webSocket a skipNegotiation = true
WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
Při použití více serverů bez rychlých relací se připojení může spustit na jednom serveru a pak přepnout na jiný server. Druhý server o předchozím připojení neví.
Ověřte, že se klient připojuje ke správnému koncovému bodu. Server je například hostovaný
http://127.0.0.1:5000/hub/myHub
a klient se pokouší připojit khttp://127.0.0.1:5000/myHub
.Pokud připojení používá ID a odeslání požadavku na server po vyjednání trvá příliš dlouho, server:
- Odstraní ID.
- Vrátí hodnotu 404.
Kód odpovědi 400 nebo 503
Pro následující chybu:
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.
Příčinou této chyby je obvykle klient, který používá pouze přenos WebSockets, ale protokol WebSocket není na serveru povolený.
Kód odpovědi 307
Při použití webSocket a skipNegotiation = true
WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307
K této chybě může dojít také během žádosti o vyjednávání.
Běžná příčina:
- Aplikace je nakonfigurovaná tak, aby vynucovala HTTPS voláním
UseHttpsRedirection
Startup
nebo vynucuje HTTPS prostřednictvím pravidla přepsání adresy URL.
Možné řešení:
- Změňte adresu URL na straně klienta z http na https.
.withUrl("https://xxx/HubName")
Kód odpovědi 405
Stavový kód HTTP 405 – Metoda není povolená
- Aplikace nemá povolené CORS .
Kód odpovědi 0
Stavový kód HTTP 0 – obvykle problém s CORS , není zadán žádný stavový kód.
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).
- Přidání očekávaných zdrojů 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').
- Přidejte
.AllowCredentials()
do zásad CORS. Tuto možnost nelze použít.AllowAnyOrigin()
nebo.WithOrigins("*")
s touto možností
Kód odpovědi 413
Stavový kód HTTP 413 – datová část je příliš velká
Příčinou je často přístupový token, který je více než 4k.
- Pokud používáte službu Azure SignalR , zmenšete velikost tokenu přizpůsobením deklarací identity odesílaných prostřednictvím služby:
.AddAzureSignalR(options =>
{
options.ClaimsProvider = context => context.User.Claims;
});
Přechodné selhání sítě
Přechodné selhání sítě může připojení zavřít SignalR . Server může uzavřené připojení interpretovat jako řádné odpojení klienta. Pokud chcete získat další informace o tom, proč se klient v těchto případech odpojil, shromážděte protokoly z klienta a serveru.