Je reçois une erreur:
la communication avec le gestionnaire de transactions sous-jacent a échoué
lorsque j'essaie d'exécuter mon application à partir de visual studio 2010. J'ai recherché ce problème sur Google, j'ai essayé toutes les solutions possibles pour résoudre cette erreur.
Ici, j'ai apporté des modifications à mes propriétés DTC.
-- Network DTC Access
-- Allow Inbound
-- Allow Outbound
-- Allow Remote Administrator
-- Allow Remote Clients
-- No Authentication Required
-- Enable XA Transaction
-- Enable SNA LU 6.2 Transaction
Faites-le moi savoir si quelqu'un connaît la solution à ce problème.
Merci Manoj Sitapara
Essayez de permettre à DTC de communiquer via le pare-feu.
Téléchargez DTCPing
sur tous les ordinateurs impliqués dans la transaction distribuée et exécutez-la.
La plupart du temps, cela vous donnera l'erreur exacte et ce qui ne va pas (comme un CID identique), etc.
Raisons possibles:
hosts
pour ajouter des mappages IP/nom d'hôte ou, si vous vous trouvez dans un domaine, leur ajouter des alias DNS.Consultez le Guide de dépannage MSDTC , qui répertorie les CID en double en tant que problème potentiel. Vous pouvez utiliser le script Powershell suivant pour détecter les CID en double et réinstaller MSDTC si nécessaire avec WinRM:
write-Host "Checking for duplicate CIDs and reinstalling MSDTC if needed."
$servers = "server1","server2","server3"
$CIDs = Invoke-Command -ComputerName $servers -ScriptBlock { gci Microsoft.PowerShell.Core\Registry::HKEY_CLASSES_ROOT\CID | foreach { $_.Name } | Out-String -Stream } #Array of all CIDs on all servers
$UniqueCIDs = $CIDs | select -Unique
if($CIDs.Length -eq $UniqueCIDs.Length){
Write-Output "All CIDs are unique, so we don't need to reinstall MSDTC"
} else {
Write-Output "Found duplicate CIDs, so we need to reinstall MSDTC on all VMs"
Invoke-Command -ComputerName $servers -ScriptBlock {
write-output "`r`nUninstalling MSDTC to regenerate CIDs on $env:computername"
msdtc -uninstall | Write-Output
sleep 25 #wait for previous command to finish
write-output "`r`nReinstalling MSDTC to regenerate CIDs on $env:computername"
msdtc -install | Write-Output
sleep 25 #wait for previous command to finish
write-output "`r`nSetting MSDTC service to automatic on $env:computername"
Set-Service msdtc -startuptype "auto"
write-output "`r`nWARNING: $env:computername may need to be restarted for changes to take effect."
}
}
J'ai eu une erreur de communication en essayant de configurer DTC et MSMQ sur un cluster. Dans mon cas, l'erreur sous-jacente était "manque de mémoire." J'ai pu envoyer des messages transactionnels du cluster vers un autre serveur, mais pas de ce serveur vers le cluster. Mon service lève cette exception:
System.Transactions.TransactionAbortedException: The transaction has aborted.
---> System.Transactions.TransactionManagerCommunicationException: Communication
with the underlying transaction manager has failed. --->
System.Runtime.InteropServices.COMException: Ran out of memory (Exception from HRESULT: 0x80000002)
Cet article avait la solution très obscure: http://www.nervousadmin.com/category/Microsoft/windows/dtc/
Résumer:
Il existe dans le registre un guide pour la clé ClusterDefaultResource sous HKLM\Cluster\ResourceTypes\Distributed Transaction Coordinator qui doit être aligné sur l'argument GUID du chemin du service DTC vers l'exécutable.
Un autre symptôme de ce problème est que vous obtiendrez une erreur de manque de mémoire si vous essayez d'accéder aux propriétés DTC via la console de gestion des services de composants. Recherchez dans l’arborescence de la console sous Services de composant/Ordinateurs/Poste de travail/Coordinateur de transactions distribuées et cliquez avec le bouton droit de la souris sur chacun des DTC répertoriés dans la liste. Cela jettera l'erreur si vos guides ne sont pas alignés.