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 a http://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 in Startupo 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.

Risorse aggiuntive