MSDTC-la Communication avec le gestionnaire de transactions sous-jacent a échoué
Je reçois l'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 chercher sur google pour ce problème, 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
4 réponses
Télécharger DTCPing
sur tous les ordinateurs impliqués dans la transaction distribuée et de l'exécuter.
La plupart du temps, il vous donnera l'erreur exacte et ce qui ne va pas (comme les CID identiques), etc.
Raisons Possibles:
- les ordinateurs ne sont pas accessibles par le nom NetBIOS. Dans ce cas, vous devez soit ajuster leur fichier
hosts
pour ajouter des mappages IP / nom d'hôte ou, si dans un domaine, ajouter des alias DNS pour eux. - les serveurs sont des machines virtuelles et ils ont été clonés VM instance. Dans ce cas, les CIDs MSDTC sont identiques et vous devez installer / réinstaller MSDTC (DTCping vous le dira).
Consultez le guide de dépannage MSDTC , qui répertorie les CIDs en double comme problème potentiel. Vous pouvez utiliser le script Powershell suivant pour détecter les CIDs en double et réinstaller MSDTC si nécessaire à L'aide de 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 l'erreur de communication échouée en essayant de configurer DTC et MSMQ sur un cluster. Dans mon cas, l'erreur sous-jacente était "à court de mémoire."J'ai pu envoyer des messages Transactionnels du cluster à un autre serveur, mais pas revenir de ce serveur au cluster. Mon service lancerait 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/
Pour résumer:
Là est un guid dans le Registre pour la clé ClusterDefaultResource sous HKLM\Cluster\ResourceTypes \ Distributed Transaction Coordinator qui doit s'aligner avec l'argument guid sur le chemin du service DTC vers l'exécutable.
Un autre symptôme de ce problème est que vous obtiendrez une erreur de mémoire insuffisante si vous essayez d'accéder aux propriétés DTC via la console de gestion des services de composants. Regardez dans l'arborescence de la console sous Component Services / Ordinateurs / Poste de travail / Distributed Transaction Coordinator et faites un clic droit sur chacun des codes défaut énumérés ici. Cela lancera l'erreur si vos GUID ne sont pas alignés.
- Services ouverts.MSC. Trouvez le coordinateur de Transaction distribué (s'il y en a deux, vous cherchez celui avec le guid dans son nom)
- ouvrez les propriétés de ce DTC. Copiez le guid du 'chemin vers l'exécutable'
- ouvrir regedit. Trouver HKLM\Cluster\ResourceTypes \ Distributed Transaction Coordinator
- comparez la valeur ClusterDefaultResource à la valeur guid vous avez copié. Si elles sont différentes, l'étape suivante devrait corriger les choses. Si non, ce n'est pas votre réponse.
- sauvegardez la valeur actuelle. Modifiez la propriété ClusterDefaultResource: collez le guid que vous avez copié à partir des services.propriétés msc DTC. Vous devrez le faire sur chaque nœud de votre cluster.
- avec de la chance, cela a résolu votre problème.