Exceptions Azure Relay
Cet article répertorie certaines exceptions pouvant être générées par les API Azure Relay. Cette référence est susceptible de changer, donc consultez-la régulièrement.
Catégories d'exceptions
Les API Relay génèrent des exceptions entrant dans les catégories suivantes. Sont également répertoriées les actions suggérées que vous pouvez prendre pour aider à résoudre les exceptions.
Erreur de codage utilisateur : System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.
Action générale : essayez de corriger le code avant de poursuivre.
Erreur d’installation/configuration : System.UnauthorizedAccessException.
Action générale: révisez votre configuration. Si nécessaire, modifiez-la.
Exceptions temporaires : Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.
Action générale : relancez l’opération ou avertissez les utilisateurs.
Autres exceptions : System.Transactions.TransactionException, System.TimeoutException.
Action générale: propre au type d’exception. Consultez le tableau dans la section suivante.
Types d'exceptions
Le tableau suivant répertorie les types d’exceptions de la messagerie et leurs causes. Il répertorie également des actions suggérées que vous pouvez prendre pour aider à résoudre les exceptions.
Type d’exception | Description | Action suggérée | Remarques sur la nouvelle tentative automatique ou immédiate |
---|---|---|---|
Délai d'expiration | Le serveur n’a pas répondu à l’opération demandée dans le délai spécifié, qui est contrôlé par le paramètre OperationTimeout. Le serveur peut avoir terminé l’opération demandée. Cela peut se produire en raison de retards sur le réseau ou une autre infrastructure. | Vérifiez la cohérence de l’état du système, puis réessayez si nécessaire. Consultez TimeoutException. | Dans certains cas, l'exécution d'une nouvelle tentative peut aider ; ajouter une logique de nouvelle tentative au code. |
Opération non valide | L’opération utilisateur demandée n’est pas autorisée sur le serveur ou le service. Consultez le message de l'exception pour obtenir plus d'informations. | Vérifiez le code et consultez la documentation. Vérifiez que l’opération demandée est valide. | La nouvelle tentative ne résout pas le problème. |
Opération annulée | Une tentative est effectuée pour appeler une opération sur un objet qui a déjà été fermé, abandonné ou supprimé. Dans de rares cas, la transaction ambiante est déjà supprimée. | Vérifiez le code et veillez à ce qu’il n’appelle pas d’opérations sur un objet supprimé. | La nouvelle tentative ne résout pas le problème. |
Accès non autorisé | L’objet TokenProvider n’a pas pu obtenir de jeton, le jeton n’est pas valide ou le jeton ne contient pas les revendications nécessaires pour effectuer l’opération. | Vérifiez que le fournisseur de jetons est créé avec les valeurs correctes. Vérifiez la configuration du service de contrôle d'accès (ACS). | Dans certains cas, l'exécution d'une nouvelle tentative peut aider ; ajouter une logique de nouvelle tentative au code. |
Exception d’argument Argument Null Argment hors plage |
Un ou plusieurs des problèmes suivants se sont produits : Un ou plusieurs des arguments fournis à la méthode ne sont pas valides. L’URI fourni à NamespaceManager ou Create contient un ou plusieurs segments de chemin d’accès. Le schéma d’URI fourni à NamespaceManager ou Ceate n’est pas valide. La valeur de la propriété est supérieure à 32 ko. |
Vérifiez le code appelant et assurez-vous que les arguments sont corrects. | La nouvelle tentative ne résout pas le problème. |
Serveur occupé | Le service n’est pas en mesure de traiter la demande pour l’instant. | Le client peut attendre pendant un certain temps, puis recommencer l'opération. | Le client peut réessayer après un intervalle spécifique. Si une nouvelle tentative provoque une exception différente, vérifiez le comportement de nouvelle tentative de cette exception. |
Quota dépassé | L'entité de messagerie a atteint sa taille maximale autorisée. | Créez de l’espace dans l’entité en recevant des messages à partir de l’entité ou de ses files d’attente secondaires. Consultez QuotaExceededException. | Une nouvelle tentative peut aider si des messages ont été supprimés entre-temps. |
Taille des messages dépassée | Une charge utile de message dépasse la limite de 256 Ko. La limite de 256 Ko correspond à la taille totale du message. Celle-ci peut inclure des propriétés système et toute surcharge Microsoft .NET. | Réduisez la taille de la charge utile de message, puis recommencez l'opération. | La nouvelle tentative ne résout pas le problème. |
QuotaExceededException
QuotaExceededException indique que le quota d’une entité spécifique a été dépassé.
Pour Relay, cette exception encapsule l’exception System.ServiceModel.QuotaExceededException, qui indique que le nombre maximal d’écouteurs est dépassé pour ce point de terminaison. Elle est indiquée dans la valeur MaximumListenersPerEndpoint du message d’exception.
TimeoutException
Une TimeoutException indique qu’une opération lancée par l’utilisateur dépasse le délai d’expiration de l’opération.
Vérifiez la valeur de la propriété ServicePointManager.DefaultConnectionLimit. Atteindre cette limite peut également entraîner une exception TimeoutException.
Pour Relay, vous pouvez recevoir des exceptions de délai d’attente lors de la première ouverture d’une connexion d’expéditeur de relais. Deux causes courantes peuvent être à l’origine de cette exception :
- La valeur OpenTimeout est peut-être trop petite (même d’une fraction de seconde).
- Un écouteur de relais local n’est peut-être pas réactif (ou peut rencontrer des problèmes de règles de pare-feu interdisant aux écouteurs d’accepter de nouvelles connexions client) et la valeur OpenTimeout est inférieure à environ 20 secondes.
Exemple :
'System.TimeoutException’: The operation did not complete within the allotted timeout of 00:00:10.
The time allotted to this operation may have been a portion of a longer timeout.
Causes courantes
Deux causes courantes peuvent être à l’origine de cette erreur :
Configuration incorrecte
Le délai d’expiration de l’opération est peut-être trop court pour un bon fonctionnement. La valeur par défaut du délai d'expiration de l'opération dans le Kit de développement logiciel (SDK) client est de 60 secondes. Vérifiez si la valeur dans votre code est définie sur une valeur trop petite. L’utilisation du processeur et la condition du réseau peuvent affecter le temps nécessaire pour terminer une opération. Il est déconseillé de définir un délai d’expiration de l’opération sur une valeur très faible.
Erreur de service temporaire
IL arrive parfois que le service Relay subisse des retards dans le traitement des requêtes. Ce problème peut se produire, par exemple, pendant les périodes à fort trafic. Dans ce cas, réessayez l’opération après un certain retard, jusqu’à ce qu’elle réussisse. Si la même opération échoue encore après plusieurs tentatives, consultez le Site de statut des services Azure pour voir s’il existe des interruptions de service connues.
ConnectionLostException – NameRenewalFailed
Symptômes
Votre client reçoit l’exception : Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
.
Cause
Le service Azure Relay redémarrer les connexions d’écouteur toutes les 24 heures. Ce comportement est normal. Le serveur Azure Relay déconnecte une connexion active d’écouteur toutes les 24 heures et l’écouteur se reconnecte au serveur en utilisant le mécanisme de nouvelle tentative.
Résolution
Une action de votre part n’est pas nécessaire car l’écouteur se reconnecte automatiquement au serveur. Si vous remarquez que votre écouteur ne se reconnecte pas, envoyez un ticket à l’équipe du support technique.