c# - MSDTC: la comunicación con el administrador de transacciones subyacente ha fallado
(4)
Estoy recibiendo error:
la comunicación con el administrador de transacciones subyacente ha fallado
cuando intento ejecutar mi aplicación desde Visual Studio 2010. He buscado en Google este problema, he intentado todas las soluciones posibles para resolver este error
Aquí he hecho cambio en mis propiedades de 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
Por favor, hágamelo saber, si alguien sabe la solución para este problema.
Gracias manoj sitapara
Consulte la guía de solución de problemas de MSDTC , que enumera los CID duplicados como un problema potencial. Puede usar la siguiente secuencia de comandos Powershell para detectar CID duplicados y reinstalar MSDTC si es necesario usando 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."
}
}
Descargue DTCPing
en todas las computadoras involucradas en la transacción distribuida y ejecútelo.
La mayoría de las veces le dará el error exacto y qué está mal (como los CID idénticos), etc.
Posibles razones:
- Las computadoras no son accesibles por nombre de NetBIOS. En este caso, debe ajustar el archivo de sus
hosts
para agregar asignaciones de IP / nombre de host o, si está en un dominio, agregar alias de DNS para ellos. - Los servidores son máquinas virtuales y se clonaron desde la misma instancia de máquina virtual. En este caso, los CID de MSDTC son idénticos y necesita instalar / reinstalar MSDTC (DTCping le dirá esto).
Intente permitir que DTC se comunique a través de Firewall.
Recibí el error de comunicación fallida al intentar configurar DTC y MSMQ en un clúster . En mi caso, el error subyacente fue "Se quedó sin memoria". Pude enviar mensajes transaccionales desde el clúster a otro servidor, pero no desde ese servidor al clúster. Mi servicio lanzaría esta excepción:
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)
Este artículo tenía la solución muy oscura: http://www.nervousadmin.com/category/microsoft/windows/dtc/
Para resumir:
Hay una guía en el registro para la clave ClusterDefaultResource en HKLM / Cluster / ResourceTypes / Distributed Transaction Coordinator que necesita alinearse con el argumento guid en la ruta del ejecutable del servicio DTC.
Otro síntoma de este problema es que obtendría un error de falta de memoria si intenta acceder a las propiedades del DTC a través de la consola de administración de Servicios de componentes. Busque en el árbol de la consola en Servicios de componentes / Computadoras / Mi computadora / Coordinador de transacciones distribuidas y haga clic con el botón derecho en cada uno de los DTC que se enumeran allí. Esto lanzará el error si sus guías no están alineadas.
- Abra services.msc. Encuentre al Coordinador de transacciones distribuidas (si hay dos, está buscando el que tiene el guid en su nombre)
- Abra las propiedades de ese DTC. Copia el guid del ''camino al ejecutable''
- Abierto regedit. Encuentre HKLM / Cluster / ResourceTypes / Distributed Transaction Coordinator
- Compare el valor ClusterDefaultResource con el guid que ha copiado. Si son diferentes, el siguiente paso debería arreglar las cosas. Si no, esta no es tu respuesta.
- Copia de seguridad del valor actual. Edite la propiedad ClusterDefaultResource: pegue el guid que copió de las propiedades DTC services.msc. Deberá hacer esto en cada nodo de su clúster.
- Con suerte, esto ha resuelto tu problema.