Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article répertorie les exceptions .NET générées par les API .NET Framework.
Le 30 septembre 2026, nous retirerons les bibliothèques WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus et com.microsoft.azure.servicebus du kit de développement logiciel (SDK) Azure Service Bus, qui ne sont pas conformes aux directives du kit de développement logiciel (SDK) Azure. Nous mettrons également fin à la prise en charge du protocole SBMP. Vous ne pourrez donc plus utiliser ce protocole après le 30 septembre 2026. Migrez vers les dernières bibliothèques du kit de développement logiciel (SDK) Azure, qui offre des correctifs de sécurité critiques et des fonctionnalités améliorées, avant cette date.
Bien que les anciennes bibliothèques puissent toujours être utilisées au-delà du 30 septembre 2026, elles ne seront plus prises en charge officiellement et mises à jour par Microsoft. Pour plus d’informations, consultez l’annonce concernant l’arrêt de la prise en charge.
Catégories d'exceptions
Les API de messagerie génèrent des exceptions qui peuvent se trouver dans les catégories suivantes, ainsi que l’action associée que vous pouvez entreprendre pour essayer de les corriger. La signification et les causes d’une exception peuvent varier en fonction du type d’entité de messagerie :
- 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 continuer.
- Erreur de configuration (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Action générale : passez en revue votre configuration et modifiez si nécessaire.
- Exceptions temporaires (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Action générale : réessayez l’opération ou informez les utilisateurs. La
RetryPolicy
classe du Kit de développement logiciel (SDK) client peut être configurée pour gérer automatiquement les nouvelles tentatives. Pour plus d’informations, consultez les instructions relatives aux nouvelles tentatives. - Autres exceptions (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Action générale : spécifique au type d’exception ; reportez-vous au tableau dans la section suivante :
Important
- Azure Service Bus ne réessaie pas une opération lorsqu’une exception a lieu sur l’opération qui se trouve dans l’étendue d’une transaction.
- Pour obtenir des conseils sur les nouvelles tentatives spécifiques à Azure Service Bus, consultez les instructions relatives aux nouvelles tentatives pour Service Bus.
Types d'exceptions
Le tableau suivant répertorie les types d’exceptions de messagerie et leurs causes, ainsi que les notes suggérées d’action que vous pouvez entreprendre.
Type d’exception | Description/Cause/Exemples | Action suggérée | Remarque sur la nouvelle tentative automatique/immédiate |
---|---|---|---|
TimeoutException | Le serveur n’a pas répondu à l’opération demandée dans le délai spécifié, qui est contrôlé par OperationTimeout. Le serveur peut avoir terminé l’opération demandée. Cela peut se produire en raison de retards de réseau ou d’autres infrastructures. | Vérifiez l’état du système pour vérifier la cohérence et réessayez si nécessaire. Consultez exceptions de délai d’attente. | Dans certains cas, l'exécution d'une nouvelle tentative peut aider ; ajouter une logique de nouvelle tentative au code. |
InvalidOperationException | 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. Par exemple, Complete() génère cette exception si le message a été reçu en mode ReceiveAndDelete . | 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. |
Exception d'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. |
ExceptionD'accèsNonAutorisé | L’objet TokenProvider n’a pas pu acquérir de jeton, le jeton n’est pas valide ou le jeton ne contient pas les revendications requises 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. | Dans certains cas, l'exécution d'une nouvelle tentative peut aider ; ajouter une logique de nouvelle tentative au code. |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
Un ou plusieurs des arguments fournis à la méthode ne sont pas valides. L’URI fourni à NamespaceManager ou Create contient des segments de chemin d’accès. Le schéma d’URI fourni à NamespaceManager ou Create 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. |
MessagingEntityNotFoundException | L’entité associée à l’opération n’existe pas ou elle a été supprimée. | Vérifiez que l’entité existe. | La nouvelle tentative ne résout pas le problème. |
MessageNotFoundException | Tentez de recevoir un message avec un numéro de séquence particulier. Ce message est introuvable. | Vérifiez que le message n’a pas déjà été reçu. Vérifiez la file d'attente de lettres mortes pour voir si le message a été désactivé. | La nouvelle tentative ne résout pas le problème. |
MessagerieCommunicationException | Le client n’est pas en mesure d’établir une connexion à Service Bus. | Vérifiez que le nom d’hôte fourni est correct et que l’hôte est accessible. Si votre code s’exécute dans un environnement avec un pare-feu/proxy, assurez-vous que le trafic vers les adresses IP/les domaines et les ports du Service Bus n’est pas bloqué. |
Une nouvelle tentative peut vous aider en cas de problèmes de connectivité intermittents. |
ServerBusyException | Le service n’est pas en mesure de traiter la demande pour l’instant. | Le client peut attendre une période de temps, puis réessayer l’opération. | Le client peut réessayer après un certain intervalle. Si une nouvelle tentative entraîne une autre exception, vérifiez le comportement de nouvelle tentative de cette exception. |
MessagingException | Exception de messagerie générique qui peut être levée dans les cas suivants : Une tentative est effectuée pour créer un QueueClient à l’aide d’un nom ou d’un chemin d’accès appartenant à un type d’entité différent (par exemple, une rubrique). Une tentative est effectuée pour envoyer un message de plus de 256 Ko. Le serveur ou le service a rencontré une erreur lors du traitement de la demande. Consultez le message de l'exception pour obtenir plus d'informations. Il s’agit généralement d’une exception temporaire.La demande a été arrêtée parce que l’entité est limitée. Code d’erreur : 50001, 50002, 50008. |
Vérifiez le code et vérifiez que seuls les objets sérialisables sont utilisés pour le corps du message (ou utilisez un sérialiseur personnalisé). Consultez la documentation pour connaître les types de valeurs pris en charge des propriétés et utilisez uniquement les types pris en charge. Vérifiez la propriété IsTransient . Si c’est vrai, vous pouvez réessayer l’opération. |
Si l’exception est due à une limitation, attendez quelques secondes, puis réessayez l’opération. Le comportement de nouvelle tentative n’est pas défini et peut ne pas être utile dans d’autres scénarios. |
MessagingEntityAlreadyExistsException | Tentez de créer une entité avec un nom déjà utilisé par une autre entité dans cet espace de noms de service. | Supprimez l’entité existante ou choisissez un autre nom pour la création de l’entité. | La nouvelle tentative ne résout pas le problème. |
QuotaExceededException | L’entité de messagerie a atteint sa taille maximale autorisée, ou le nombre maximal de connexions à un espace de noms a été dépassé. | Créez de l’espace dans l’entité en recevant des messages à partir de l’entité ou de ses files d’attente secondaires. Voir QuotaExceededException. | Une nouvelle tentative peut aider si des messages ont été supprimés entre-temps. |
RuleActionException | Service Bus renvoie cette exception si vous essayez de créer une action de règle non valide. Service Bus associe cette exception à un message désactivé si une erreur se produit lors du traitement de l'action de règle pour ce message. | Vérifiez que l'action de règle est correcte. | La nouvelle tentative ne résout pas le problème. |
FilterException | Service Bus retourne cette exception si vous tentez de créer un filtre non valide. Service Bus associe cette exception à un message désactivé si une erreur se produit lors du traitement du filtre pour ce message. | Vérifiez l’exactitude du filtre. | La nouvelle tentative ne résout pas le problème. |
SessionCannotBeLockedException | Essayez d’accepter une session avec un ID de session spécifique, mais la session est actuellement verrouillée par un autre client. | Vérifiez que la session est déverrouillée par d’autres clients. | Une nouvelle tentative peut aider si la session a été libérée entre-temps. |
TransactionSizeExceededException | Un trop grand nombre d’opérations font partie de la transaction. | Réduisez le nombre d’opérations qui font partie de cette transaction. | La nouvelle tentative ne résout pas le problème. |
MessagingEntityDisabledException (Exception d'Entité de Messagerie Désactivée) | Demande d’une opération d’exécution sur une entité désactivée. | Activez l’entité. | Une nouvelle tentative peut vous aider si l’entité a été activée dans l’intervalle. |
NoMatchingSubscriptionException | Service Bus retourne cette exception si vous envoyez un message à une rubrique sur laquelle le préfiltrage est activé et qu’aucun des filtres ne correspond. | Assurez-vous qu'au moins un filtre correspond. | La nouvelle tentative ne résout pas le problème. |
MessageSizeExceededException | Une charge utile de message dépasse la limite de 256 Ko. La limite de 256 Ko est la taille totale du message, qui peut inclure les propriétés système et toute surcharge .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. |
TransactionException | La transaction ambiante (Transaction.Current ) n’est pas valide. Elle a peut-être été terminée ou abandonnée. Une exception interne peut fournir des informations supplémentaires. |
La nouvelle tentative ne résout pas le problème. | |
TransactionInDoubtException | Une opération est tentée sur une transaction qui est en doute, ou une tentative est effectuée pour valider la transaction et la transaction devient en doute. | Votre application doit gérer cette exception (en tant que cas spécial), car la transaction a peut-être déjà été validée. | - |
QuotaExceededException
QuotaExceededException indique qu’un quota pour une entité spécifique a été dépassé.
Remarque
Pour connaître les quotas Service Bus, consultez Quotas.
Files d’attente et rubriques
Pour les files d’attente et les rubriques, il s’agit souvent de la taille de la file d’attente. La propriété du message d’erreur contient davantage d’informations, comme dans l’exemple suivant :
Microsoft.ServiceBus.Messaging.QuotaExceededException
Message: The maximum entity size has been reached or exceeded for Topic: 'xxx-xxx-xxx'.
Size of entity in bytes:1073742326, Max entity size in bytes:
1073741824..TrackingId:xxxxxxxxxxxxxxxxxxxxxxxxxx, TimeStamp:3/15/2013 7:50:18 AM
Ce message indique que la rubrique a dépassé sa limite de taille, dans ce cas 1 Go (limite de taille par défaut).
Espaces de noms
Pour les espaces de noms, QuotaExceededException peut indiquer qu’une application a dépassé le nombre maximal de connexions à un espace de noms. Par exemple:
Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 --->
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]:
ConnectionsQuotaExceeded for namespace xxx.
Causes courantes
Il existe deux causes courantes pour cette erreur : la file d’attente de lettres mortes et des récepteurs de messages non fonctionnels.
File d’attente de lettres mortes Un lecteur ne parvient pas à terminer les messages et les messages sont retournés à la file d’attente/rubrique lorsque le verrou expire. Cela peut se produire si le lecteur rencontre une exception qui l’empêche d’appeler BrokeredMessage.Complete. Une fois un message lu 10 fois, il passe à la file d'attente de lettres mortes par défaut. Ce comportement est contrôlé par la propriété QueueDescription.MaxDeliveryCount et a la valeur par défaut 10. Quand les messages s'accumulent dans la file d'attente de lettres mortes, ils prennent de la place.
Pour résoudre ce problème, lisez et terminez les messages de la file d'attente de lettres mortes, comme vous le feriez pour une autre file d'attente. Vous pouvez utiliser la méthode FormatDeadLetterPath pour aider à mettre en forme le chemin d’accès de la file d’attente de lettres mortes.
Le récepteur s’est arrêté. Un récepteur a cessé de recevoir des messages d’une file d’attente ou d’un abonnement. La façon de l’identifier consiste à examiner la propriété QueueDescription.MessageCountDetails , qui affiche la répartition complète des messages. Si la propriété ActiveMessageCount est élevée ou croissante, les messages ne sont pas lus aussi rapidement qu’ils sont écrits.
TimeoutException
Un TimeoutException indique qu'une opération initiée par l'utilisateur prend plus de temps que le temps d’attente de l’opération.
Vous devez vérifier la valeur de la propriété ServicePointManager.DefaultConnectionLimit , car l’atteinte de cette limite peut également entraîner une exception TimeoutException.
Les délais d’attente sont censés se produire pendant ou entre les opérations de maintenance, telles que les mises à jour du service Service Bus (ou) les mises à jour du système d’exploitation sur les ressources qui exécutent le service. Pendant les mises à jour du système d’exploitation, les entités sont déplacées et les nœuds sont mis à jour ou redémarrés, ce qui peut entraîner des temps d’attente. Pour plus d’informations sur le contrat de niveau de service (SLA) pour le service Azure Service Bus, consultez le contrat SLA pour Service Bus.
Files d’attente et rubriques
Pour les files d’attente et les sujets, le délai d’attente est spécifié dans la propriété MessagingFactorySettings.OperationTimeout, dans le contexte de la chaîne de connexion ou via ServiceBusConnectionStringBuilder. Le message d’erreur lui-même peut varier, mais il contient toujours la valeur de délai d’attente spécifiée pour l’opération actuelle.
MessageLockLostException
La cause
MessageLockLostException est levée lorsqu’un message est reçu à l’aide du mode de réception PeekLock et à l'expiration du verrou détenu par le client côté service.
Le verrou associé à un message peut expirer pour diverses raisons :
- Le minuteur du verrou a expiré avant que l’application cliente l’ait renouvelé.
- L’application cliente a acquis le verrou, l’a enregistré dans un magasin persistant, puis a redémarré. Après redémarrage, l’application cliente a examiné les messages en cours et tenté de les compléter.
Vous pouvez également recevoir cette exception dans les scénarios suivants :
- Mise à jour du service
- Mise à jour du système d’exploitation
- Changement des propriétés de l’entité (file d’attente, rubrique, abonnement) pendant le maintien du verrou.
Résolution
Lorsqu’une application cliente reçoit MessageLockLostException, elle ne peut plus traiter le message. L’application cliente peut éventuellement envisager de journaliser l’exception à des fins d’analyse, mais le client doit supprimer le message.
Étant donné que le verrou sur le message a expiré, celui-ci retourne à la file d’attente (ou à l’abonnement) et peut être traité par l’application cliente suivante qui appelle la réception.
Si MaxDeliveryCount a dépassé, le message peut être déplacé vers DeadLetterQueue.
SessionLockLostException
La cause
La sessionLockLostException est levée lorsqu’une session est acceptée et que le verrou détenu par le client expire côté service.
Le verrou associé à une session peut expirer pour différentes raisons :
- Le minuteur du verrou a expiré avant que l’application cliente l’ait renouvelé.
- L’application cliente a acquis le verrou, l’a enregistré dans un magasin persistant, puis a redémarré. Après redémarrage, l’application cliente a examiné les sessions en cours et tenté de traiter les messages dans celles-ci.
Vous pouvez également recevoir cette exception dans les scénarios suivants :
- Mise à jour du service
- Mise à jour du système d’exploitation
- Changement des propriétés de l’entité (file d’attente, rubrique, abonnement) pendant le maintien du verrou.
Résolution
Lorsqu’une application cliente reçoit SessionLockLostException, elle ne peut plus traiter les messages sur la session. L’application cliente peut envisager de journaliser l’exception pour l’analyse, mais le client doit supprimer le message.
Étant donné que le verrou sur la session a expiré, celle-ci retourne à la file d’attente (ou à l’abonnement) et peut être verrouillée par l’application cliente suivante qui l’accepte. Étant donné que le verrou de session est détenu par une seule application cliente à un moment donné, le traitement dans l’ordre est garanti.
SocketException
La cause
Une exception SocketException est générée dans les cas suivants :
- Quand une tentative de connexion échoue parce que l’hôte n’a pas répondu correctement après un délai spécifié (code d’erreur TCP 10060).
- Quand une connexion établie a échoué parce que l’hôte connecté n’a pas pu répondre.
- Une erreur s’est produite lors du traitement du message ou le délai d’attente est dépassé par l’hôte distant.
- Quand il y a un problème de ressource réseau sous-jacent.
Résolution
Les erreurs SocketException indiquent que la machine virtuelle hébergeant les applications ne peut pas convertir le nom <mynamespace>.servicebus.windows.net
en adresse IP correspondante.
Vérifiez que la commande qui suit parvient à mapper à une adresse IP.
PS C:\> nslookup <mynamespace>.servicebus.windows.net
Ce qui doit produire une sortie comme :
Name: <cloudappinstance>.cloudapp.net
Address: XX.XX.XXX.240
Aliases: <mynamespace>.servicebus.windows.net
Si le nom ne se résout pas en une adresse IP et un alias d’espace de noms, consultez l’administrateur réseau pour approfondir l’investigation. La résolution de noms s’effectue au travers d’un serveur DNS qui est généralement une ressource du réseau du client. Si la résolution DNS est effectuée par Azure DNS, contactez le support Azure.
Si la résolution de noms fonctionne comme prévu, vérifiez si les connexions à Azure Service Bus sont autorisées ici.
MessagingException
La cause
MessagingException est une exception générique qui peut être levée pour différentes raisons. Voici quelques-unes des raisons suivantes :
- Une tentative est effectuée pour créer un QueueClient sur une rubrique ou un abonnement.
- La taille du message envoyé est supérieure à la limite du niveau donné. En savoir plus sur les quotas et limites du Service Bus.
- La demande de plan de données spécifique (envoi, réception, exécution, abandon) a été arrêtée en raison d’une limitation.
- Problèmes temporaires causés par les mises à niveau et redémarrages de service.
Remarque
La liste des exceptions n’est pas exhaustive.
Résolution
Les étapes de résolution dépendent de la cause de la levée de l’exception MessagingException.
- Pour les problèmes temporaires (où isTransient est défini sur true) ou pour les problèmes de limitation, une nouvelle tentative de l’opération peut la résoudre. La stratégie de nouvelle tentative par défaut sur le Kit de développement logiciel (SDK) peut être utilisée.
- Pour d'autres problèmes, les détails de l'exception indiquent le problème et les étapes de résolution peuvent être déduites de ces détails.
StorageQuotaExceededException
La cause
StorageQuotaExceededException est généré lorsque la taille totale des entités d’un espace de noms Premium dépasse la limite de 1 To par unité de messagerie.
Résolution
- Augmenter le nombre d’unités de messagerie affectées à l’espace de noms Premium
- Si vous utilisez déjà des unités de messagerie maximales autorisées pour un espace de noms, créez un espace de noms distinct.
Étapes suivantes
Pour obtenir la référence complète de l’API .NET Service Bus, consultez la référence de l’API .NET Azure. Pour obtenir des conseils de dépannage, consultez le guide de résolution des problèmes.