web-dev-qa-db-fra.com

Le gestionnaire de transactions MSDTC n'a pas pu extraire la transaction du gestionnaire de transactions source en raison de problèmes de communication

J'ai hébergé ma Webapp sur le serveur 1 et ma base de données sur le serveur 2

Mais je reçois l'erreur suivante

"La communication avec le gestionnaire de transactions sous-jacent a échoué."

J'ai googlé et trouvé un article qui mentionnait que c'était le problème du DTC (transaction distribuée). J'ai activé le DTC sur le serveur 2 (serveur DB) et en ai fait une exception dans le pare-feu.

enter image description here

enter image description here

Mais toujours la même erreur.

Voici la trace complète de la pile

Message: System.Transactions.TransactionManagerCommunicationException: la communication avec le gestionnaire de transactions sous-jacent a échoué. ---> System.Runtime.InteropServices.COMException: le gestionnaire de transactions MSDTC n'a pas pu extraire la transaction du gestionnaire de transactions source en raison de problèmes de communication. Les causes possibles sont: un pare-feu est présent et il n'a pas d'exception pour le processus MSDTC, les deux machines ne peuvent pas se trouver par leurs noms NetBIOS ou la prise en charge des transactions réseau n'est pas activée pour l'un des deux gestionnaires de transactions. . propagationToken)

Conseils bienveillants

12
MARKAND Bhatt

Nous avons eu exactement la même situation, et plus d'une fois. À chaque fois, c'était l'un des suivants:

  1. L'adresse IP dans le DNS du serveur est obsolète (comme indiqué dans le message d'erreur: "deux machines ne peuvent pas se trouver par leurs noms NetBIOS"). Vous pouvez vérifier si c'est le cas en essayant ping servername d'un serveur à un autre dans l'invite de commande. Si le ping par nom échoue et que le ping par IP réussit (ou le ping par nom renvoie la mauvaise IP), vous devriez parler aux administrateurs système pour jeter un œil à DNS/DHCP.

  2. Les serveurs sont créés sous la forme d'une image de serveur préconfiguré (par exemple, si vous travaillez avec des machines virtuelles et au lieu de faire une nouvelle installation pour chacun des serveurs, vous clonez simplement l'image). C'est un problème parce que DTC a un "identifiant" interne - et en cas de clonage d'image, vos deux installations ont maintenant le même ID DTC et ne pourront pas communiquer entre elles. La solution consiste à simplement désinstaller et réinstaller le DTC.

J'espère que ça aide.

17
veljkoz

J'ai eu le même problème lors de la connexion à un serveur SQl distant. La solution dans mon cas était d'ajouter "enlist=false" à la chaîne de connexion.

2
LpiAlreadyTaken

A vérifier:

  • Avez-vous fait cette configuration sur les deux serveurs?
  • Les deux serveurs sont-ils membres du même domaine?
  • Avez-vous vérifié le journal des événements?
1
Shiraz Bhaiji

Résolu après l'ajout de l'IP distant\nom de la machine aux fichiers sur le serveur: hôtes, lmhosts dans le dossier C:\Windows\System32\drivers\etc

0
Артем