2012-07-06 213 views
15

Recibo un error "La comunicación con el administrador de transacciones subyacente ha fallado" cuando intento ejecutar mi aplicación desde Visual Studio 2010. Tengo una búsqueda en Google para este problema, he intentado todas las soluciones posibles para resolver este error.MSDTC - Falló la comunicación con el administrador de transacciones subyacente

Aquí he realizado cambios 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 

Háganme saber, si alguien conoce la solución a este problema.

Gracias Manoj Sitapara

+2

¿Encendiste el cortafuegos? –

+0

¿Se puede acceder a las dos computadoras por nombre de NetBIOS (su nombre de computadora)? Solo prueba un ping. De lo contrario, ejecute DTCPing. –

Respuesta

18

Trate permitiendo DTC para comunicarse a través de Firewall.

enter image description here

12

Descarga DTCPing en todos los equipos que participan en la transacción distribuida y ejecutarlo.

La mayoría de las veces se le dará el error exacto y lo que está mal (como idéntica CID), etc.

razones posibles:

  1. Las computadoras no son accesibles a nombre de NetBIOS. En este caso, debe ajustar su archivo hosts para agregar asignaciones IP/nombre de host o, si está en un dominio, agregar alias DNS para ellos.
  2. 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 usted necesita instalar/reinstalar MSDTC (DTCping le dirá esto).
+0

Gracias por esto, mi problema fue que tenía mi servidor web en un dominio y mi servidor de base de datos en otro. DTCping lanzó un error que indica que el dominio totalmente calificado no es un nombre de NetBIOS. Tuve que agregar entradas para la otra máquina a cada archivo de hosts y ajustar mi cadena de conexión. – ravuya

2

Compruebe el MSDTC troubleshooting guide, que enumera los CID duplicados como un posible problema. Usted puede utilizar el siguiente script de PowerShell para detectar los CID duplicados y volver a instalar MSDTC si es necesario el uso 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." 
    } 
} 
0

me dieron el error de comunicación fallado al tratar de establecer 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 tirarí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/

En resumen:

No es un GUID en el registro para el ClusterDefaultResource clave en HKLM \ Cluster \ ResourceTypes \ Coordinador de transacciones distribuidas que debe alinearse con el argumento guid en la ruta del servicio DTC hacia el ejecutable.

Otro síntoma de este problema es que se obtendría un error de falta de memoria si intenta acceder a las propiedades de 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 PC/Coordinador de transacciones distribuidas y haga clic derecho en cada uno de los DTC enumerados allí. Esto arrojará el error si tus guids no están alineados.

  • Abra services.msc. Busque el Coordinador de transacciones distribuidas (si hay dos, está buscando uno con el guid en su nombre)
  • Abra las propiedades de ese DTC. Copie el guid de la 'ruta al ejecutable'
  • Abrir regedit. Buscar HKLM \ Cluster \ ResourceTypes \ Distributed Transaction Coordinator
  • Compare el valor de ClusterDefaultResource con el guid que ha copiado. Si son diferentes, el próximo paso debería arreglar las cosas. Si no, esta no es tu respuesta.
  • Realice una copia de seguridad del valor actual. Edite la propiedad ClusterDefaultResource: pegue la guía que copió de las propiedades de los servicios Dcs .msc. Tendrá que hacer esto en cada nodo de su clúster.
  • Con suerte, esto ha resuelto su problema.
Cuestiones relacionadas