Résolution des problèmes de routage et de remise de messages

Cette section regroupe quelques suggestions permettant de corriger les symptômes les plus courants liés au routage et à la remise de messages.

Symptôme : les messages demeurent dans la file d'attente de transmission

Assurez-vous que la fonction de remise de messages Service Broker est activée dans la base de données. La colonne is_broker_enabled de l'affichage catalogue sys.databases permet de savoir si l'option de remise de messages est activée, comme illustré dans l'exemple ci-dessous :

SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;

La remise de messages Service Broker peut être désactivée pour éviter que des messages ne soient acheminés vers la mauvaise base de données. Pour plus d'informations sur la remise de messages Service Broker , consultez Gestion des identités Service Broker. Pour plus d'informations sur l'activation de la remise de messages Service Broker , consultez Procédure : activer la remise de messages Service Broker dans les bases de données (Transact-SQL).

Si la remise de messages Service Broker est active, contrôlez la colonne transmission_status dans l'affichage catalogue sys.transmission_queue à la recherche d'éventuels messages. Les messages d'erreur courants sont les suivants :

Message Description

Aucun itinéraire ne correspond au nom de service de destination pour cette conversation. Créez un itinéraire vers le nom de service de destination pour que les messages de cette conversation soient remis.

Service Broker n'a trouvé aucun itinéraire vers le service spécifié.

Le broker du service cible est inaccessible.

Service Broker n'a pas pu remettre le message au broker du service cible.

La couche de transport n'est pas disponible.

Il n'existe aucun point de terminaison Service Broker dans l'instance, ou le démarrage des points de terminaison Service Broker existants a échoué.

La file d'attente cible est désactivée.

L'option STATUS de la file d'attente que le service de destination utilise est définie sur OFF. Service Broker n'ajoute pas de nouveaux messages à une file d'attente dont l'option STATUS est désactivée (OFF).

Une erreur s'est produite lors de la réception des données : '10054(Une connexion existante a dû être fermée par l'hôte distant.)'.

La partie distante impliquée dans la conversation a accepté la connexion TCP/IP, mais elle a fermé la connexion avant de permettre l'envoi d'un message.

(Aucun)

Aucune tentative d'envoi de message n'a été effectuée par Service Broker . Il est possible que la remise de messages Service Broker soit désactivée dans la base de données.

Symptôme : l'itinéraire existe, mais l'état de la transmission n'indique aucun itinéraire pour le service

Si l'itinéraire a été créé après le message, la raison la plus fréquente à l'origine de ce symptôme vient qu'aucune tentative d'envoi de message n'a été effectuée depuis la création de l'itinéraire. Pour plus d'informations sur les nouvelles tentatives, consultez Réseau et routage Service Broker.

Procédez à une vérification pour vous assurer que le nom du service spécifié dans le message correspond exactement au nom du service spécifié dans l'itinéraire. Service Broker utilise une comparaison binaire, octet par octet, pour faire correspondre les noms de services. Si un itinéraire indiquant le nom du service existe, vérifiez cette concordance en exécutant une requête similaire à celle qui suit :

SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
    (SELECT remote_service_name
     FROM sys.routes AS routes
     WHERE tq.to_service_name = routes.remote_service_name) ;

Le nom du service qui apparaît dans l'ensemble de résultats ne correspond pas exactement à la table de routage pour la base de données. Remarquez que si un itinéraire ne spécifie aucun nom de service, il correspondra à n'importe quel nom de service. Pour plus d'informations sur le routage, consultez Routage Service Broker.

Si le message indique un identificateur d'instance Service Broker, vérifiez que l'itinéraire précise le même identificateur ou, le cas échéant, n'indique aucun identificateur d'instance Service Broker.

Vérifiez que le délai de l'itinéraire n'a pas expiré. Dans l'affichage catalogue sys.routes, la colonne de la durée de vie renseigne sur la date d'expiration et la durée de l'itinéraire.

Symptôme : l'état de la transmission signale que le Service Broker cible est inaccessible

La destination a refusé le message. Le nom de service spécifié ne correspond peut-être pas au nom d'un service hébergé par l'instance SQL Server de destination, ou la destination peut également ne contenir aucun itinéraire pour le service. Pour résoudre ce problème, vérifiez la configuration du routage et du service pour la destination.

Symptôme : l'état de la transmission signale une couche de transport non disponible

Vérifiez qu'un point de terminaison Service Broker existe, son état doit être STARTED. Si ce n'est pas le cas, créez un point de terminaison. Pour plus d'informations sur les points de terminaison Service Broker , consultez Points de terminaison Service Broker. Pour plus d'informations sur la création d'un point de terminaison, consultez Procédure : activer le réseau Service Broker (Transact-SQL).

Symptôme : l'état de la transmission indique « Une connexion existante a dû être fermée par l'hôte distant. »

La sécurité du transport est peut-être mal configurée ou l'adresse TCP/IP pour l'itinéraire indique un port utilisé par un autre service que Service Broker . Remarquez que Service Broker n'utilise pas le protocole TDS (Tabular Data Stream). L'itinéraire doit spécifier le port correspondant au port utilisé par le point de terminaison Service Broker sur l'instance SQL Server distante.

Vérifiez la configuration du point de terminaison Service Broker pour vous assurer que les paramètres de sécurité réseau des deux instances sont compatibles. Si le point de terminaison Service Broker d'une instance indique REQUIRED ou ENABLED, le point de terminaison Service Broker de l'autre instance ne peut pas spécifier NONE.

Contrôlez les certificats, les utilisateurs et les autorisations pour la sécurité du transport Service Broker . La configuration de la sécurité du transport est expliquée à la rubrique Sécurité du transport Service Broker.

Voir aussi

Tâches

Procédure : activer le réseau Service Broker (Transact-SQL)

Concepts

Réseau et routage Service Broker
Points de terminaison Service Broker
Routage Service Broker
Démarrage et arrêt d'une file d'attente

Autres ressources

sys.databases (Transact-SQL)
sys.transmission_queue (Transact-SQL)
sys.routes (Transact-SQL)
sys.service_broker_endpoints (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005