Remarque
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.
S’applique à :SQL Server
Azure SQL Managed Instance
Service Broker utilise trois types de messages système pour communiquer les informations d’état et d’erreur de Service Broker.
Gérer les messages système
La plupart des messages dans une conversation Service Broker sont définis par l’application et utilisés pour communiquer entre les services. Chaque message doit se conformer à un format de type message qui a été défini par une CREATE MESSAGE TYPE instruction. L’ensemble de types de messages autorisés pour une conversation est défini par le contrat spécifié dans l’instruction BEGIN DIALOG CONVERSATION .
Outre les types de messages définis par l'application spécifiés dans le contrat, toute conversation peut également recevoir des messages qui utilisent l'un des trois types de messages définis par le système. Service Broker utilise ces types de messages pour signaler des erreurs et l’état des dialogues. Chaque application doit suivre une logique de gestion des messages d'erreur (Error) et de fin de dialogue (End Dialog). Si l’application définit un minuteur de conversation sur une conversation de dialogue, l’application doit avoir une logique pour traiter les messages du minuteur de dialogue. Service Broker fournit ces types de message à chaque service, qu’ils apparaissent dans le contrat du service ou non. Pour plus d’informations, consultez Gérer les messages d’erreur Service Broker.
Messages d’erreur
Lorsqu'un service distant met fin à un dialogue par le biais d'une erreur ou que le broker local détecte une erreur irrécupérable dans un dialogue, un message d'erreur est créé par ce broker. Les messages d’erreur sont de type http://schemas.microsoft.com/SQL/ServiceBroker/Error. ils sont validés en tant que contenu XML bien formé.
Le document XML contenu dans un message d’erreur utilise l’espace de noms http://schemas.microsoft.com/SQL/ServiceBroker. L’élément racine du document a le nom local Error et contient deux éléments nommés Code et Message. L’élément Code contient une valeur d’entier. L’élément Message contient le texte lisible du message.
Par exemple, un message d'erreur créé automatiquement par un service traitant les notes de frais peut afficher le contenu XML suivant (remis en forme pour plus de lisibilité) :
<?xml version="1.0"?>
<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker">
<Code>12</Code>
<Description>
Unknown cost center "127-1000". Please check the cost center list
and resubmit the report.
</Description>
</Error>
Une opération de réception reçoit un message d'erreur avant tout autre message pour ce dialogue, à moins qu'il ne s'agisse d'un message du minuteur de dialogue. L'ordre d'arrivée du message d'erreur dans la file d'attente n'est pas pris en compte. Lorsqu'une file d'attente contient à la fois un message du minuteur de dialogue et un message d'erreur, l'opération de réception récupère en priorité le message du minuteur de dialogue.
Lorsqu'un message d'erreur est arrivé pour un dialogue, le broker déclenche une erreur si une application essaie d'envoyer un message dans ce dialogue. Néanmoins, une application peut recevoir tous les messages destinés à ce dialogue s'il en reste, même après avoir reçu un message d'erreur.
Terminer les messages de boîte de dialogue
Lorsqu'une application met un terme à un dialogue sans spécifier d'erreur, le broker local envoie un message de fin de dialogue (End Dialog) au broker distant. Les messages de fin de dialogue sont de type https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.
Les messages de fin de dialogue sont des messages vides. Une opération de réception reçoit un message de ce type dans l'ordre suivant lequel il est arrivé dans la file d'attente.
Messages du minuteur de boîte de dialogue
Les messages du minuteur de dialogue signalent la fin du décompte du minuteur de conversation pour un dialogue. Ces messages sont de type https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Un minuteur de conversation est propre à un côté de la conversation. Service Broker n’envoie jamais un message de minuteur de dialogue à l’autre côté de la conversation.
Ces messages sont vides. Une opération de réception reçoit le message du minuteur de dialogue avant tout autre message de cette boîte de dialogue, quel que soit l’ordre dans lequel le message de délai d’attente est arrivé dans la file d’attente.
Contenu connexe
- Guide pratique pour récupérer des informations à partir d’un message d’erreur Service Broker (Transact SQL)
- COMMENCER LE MINUTEUR DE CONVERSATION (Transact-SQL)
- COMMENCER LA CONVERSATION DE DIALOGUE (Transact-SQL)
- CRÉER UN CONTRAT (Transact-SQL)
- CREATE MESSAGE TYPE (Transact-SQL) - Commande pour créer un type de message dans SQL Server.
- FIN DE LA CONVERSATION (Transact-SQL)
- RECEVOIR (Transact-SQL)