Risolvere gli errori di connessione
Questa sezione fornisce informazioni sugli errori che possono verificarsi durante il tentativo di stabilire una connessione a un hub ASP.NET Core SignalR .
Codice di risposta 404
Quando si usano WebSocket e skipNegotiation = true
WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
Quando si usano più server senza sessioni permanenti, la connessione può essere avviata in un server e quindi passare a un altro server. L'altro server non è a conoscenza della connessione precedente.
Verificare che il client si connetta all'endpoint corretto. Ad esempio, il server è ospitato in
http://127.0.0.1:5000/hub/myHub
e il client sta tentando di connettersi ahttp://127.0.0.1:5000/myHub
.Se la connessione usa l'ID e richiede troppo tempo per inviare una richiesta al server dopo la negoziazione, il server:
- Elimina l'ID.
- Restituisce un valore 404.
Codice di risposta 400 o 503
Per l'errore seguente:
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.
Questo errore è in genere causato da un client che usa solo il trasporto WebSocket, ma il protocollo WebSocket non è abilitato nel server.
Codice di risposta 307
Quando si usano WebSocket e skipNegotiation = true
WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307
Questo errore può verificarsi anche durante la richiesta di negoziazione.
Causa più comune:
- L'app è configurata per applicare HTTPS chiamando
UseHttpsRedirection
inStartup
o impone HTTPS tramite la regola di riscrittura url.
Possibile soluzione:
- Modificare l'URL sul lato client da "http" a "https".
.withUrl("https://xxx/HubName")
Codice di risposta 405
Codice di stato HTTP 405 - Metodo non consentito
- L'app non ha CORS abilitato
Codice di risposta 0
Codice di stato HTTP 0 : in genere un problema CORS , non viene assegnato alcun codice di stato
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).
- Aggiungere le origini previste a
.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').
- Aggiungere
.AllowCredentials()
al criterio CORS. Non è possibile usare.AllowAnyOrigin()
o.WithOrigins("*")
con questa opzione
Codice di risposta 413
Codice di stato HTTP 413 - Payload troppo grande
Ciò è spesso causato dalla presenza di un token di accesso superiore a 4k.
- Se si usa il servizio di Azure SignalR , ridurre le dimensioni del token personalizzando le attestazioni inviate tramite il servizio con:
.AddAzureSignalR(options =>
{
options.ClaimsProvider = context => context.User.Claims;
});
Errori di rete temporanei
Gli errori di rete temporanei possono chiudere la SignalR connessione. Il server può interpretare la connessione chiusa come disconnessione normale del client. Per ottenere altre informazioni sul motivo per cui un client disconnesso in questi casi raccoglie i log dal client e dal server.