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
dansStartup
, 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.