Résoudre les erreurs de connexion

Cette section fournit de l’aide sur les erreurs qui peuvent se produire lors de la tentative de connexion à un hub ASP.NET CoreSignalR.

Code de réponse 404

Lors de l’utilisation de WebSockets et skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • Lorsque vous utilisez plusieurs serveurs sans sessions collantes, la connexion peut démarrer sur un serveur, puis basculer vers un autre serveur. L’autre serveur ignore l’existence de la connexion précédente.

  • Vérifiez que le client se connecte au bon point de terminaison. Par exemple, le serveur est hébergé sur http://127.0.0.1:5000/hub/myHub et le client tente de se connecter à http://127.0.0.1:5000/myHub.

  • Si la connexion utilise l’ID et prend trop de temps pour envoyer une requête au serveur après la négociation, le serveur :

    • Supprime l’ID.
    • Renvoie un code 404.

Code de réponse 400 ou 503

Pour l’erreur suivante :

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.

Cette erreur est généralement causée par un client qui utilise uniquement le transport WebSockets alors que le protocole WebSocket n’est pas activé sur le serveur.

Code de réponse 307

Lors de l’utilisation de WebSockets et skipNegotiation = true

WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307

Cette erreur peut également se produire pendant la requête de négociation.

Cause fréquente :

  • L’application est configurée pour appliquer un protocole HTTPS en appelant UseHttpsRedirection dans Startup, ou applique HTTPS via une règle de réécriture d’URL.

Solution possible :

  • Remplacez l’URL côté client de « http » par « https ». .withUrl("https://xxx/HubName")

Code de réponse 405

Code d’état http 405 - Méthode non autorisée

  • CORS n’est pas activé pour l’application

Code de réponse 0

Code d’état http 0 - Généralement un problème CORS, aucun code d’état n’est donné

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).
  • Ajoutez les origines attendues à .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').
  • Ajoutez .AllowCredentials() à votre stratégie CORS. Impossible d’utiliser .AllowAnyOrigin() ou .WithOrigins("*") avec cette option

Code de réponse 413

Code d’état http 413 - Charge utile trop volumineuse

Cela est souvent dû à un jeton d’accès supérieur à 4 000.

  • Si vous utilisez le service Azure SignalR, réduisez la taille des jetons en personnalisant les revendications envoyées via le service avec :
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

Défaillances réseau temporaires

Les défaillances réseau temporaires peuvent fermer la connexion SignalR. Le serveur peut interpréter la fermeture de la connexion comme une déconnexion progressive du client. Pour obtenir plus d’informations sur la raison pour laquelle un client s’est déconnecté dans ces cas collecter les journaux du client et du serveur.

Ressources supplémentaires