2012-07-06 10 views
15

Ricevo errore "comunicazione con il gestore transazioni sottostante non riuscita" quando sto provando a eseguire la mia applicazione da Visual Studio 2010. Ho cercato su google per questo problema, I ho provato tutte le possibili soluzioni per risolvere questo errore.MSDTC - Comunicazione con il gestore transazioni sottostante non riuscita

Qui ho apportato modifiche alle proprietà 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 

Per favore fatemi sapere, se qualcuno conosce la soluzione per questo problema.

Grazie Manoj Sitapara

+2

Hai acceso il firewall? –

+0

I due computer sono raggiungibili con il nome NetBIOS (il nome del computer)? Prova un ping. Altrimenti, eseguire DTCPing. –

risposta

18

Prova permettendo DTC per comunicare attraverso il firewall.

enter image description here

12

Scarica DTCPing su tutti i computer coinvolti nella transazione distribuita ed eseguirlo.

maggior parte delle volte che vi darà l'errore esatto e ciò che è sbagliato (come identico CID di), ecc

Possibili motivi:

  1. I computer non sono raggiungibili per nome NetBIOS. In questo caso devi modificare il loro file hosts per aggiungere mapping IP/nomehost o, se in un dominio, aggiungere alias DNS per loro.
  2. I server sono VM e sono stati clonati dalla stessa istanza VM. In questo caso le CID MSDTC sono identiche e devi installare/reinstallare MSDTC (DTCping ti dirà questo).
+0

Grazie per questo - il mio problema era che avevo il mio server web su un dominio e il mio server di database su un altro. DTCping ha generato un errore che il dominio completo non è un nome NetBIOS. Ho dovuto aggiungere voci per l'altra macchina a ciascun file host e regolare la mia stringa di connessione. – ravuya

2

Controllare lo MSDTC troubleshooting guide, che elenca le CID duplicate come potenziale problema. È possibile utilizzare il seguente script PowerShell per rilevare CID duplicati e reinstallare MSDTC, se necessario, utilizzando Gestione remota Windows:

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

ho avuto l'errore di comunicazione non è riuscito durante il tentativo di configurare DTC e MSMQ su un cluster. Nel mio caso l'errore sottostante era "Ran out of memory". Sono stato in grado di inviare messaggi transazionali dal cluster a un altro server, ma non di tornare da quel server al cluster. Il mio servizio getterebbe questa eccezione:

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) 

Questo articolo ha avuto la soluzione molto oscuro: http://www.nervousadmin.com/category/microsoft/windows/dtc/

In sintesi:

V'è un GUID nel Registro di sistema per il ClusterDefaultResource chiave sotto HKLM \ Cluster \ ResourceTypes \ Distributed Transaction Coordinator che deve essere allineato con l'argomento guid sul percorso del servizio DTC all'eseguibile.

Un altro sintomo di questo problema è che si otterrebbe un errore di memoria insufficiente se si tenta di accedere alle proprietà DTC tramite la console di gestione di Servizi componenti. Cerca nella struttura della console in Servizi componenti/Computer/Risorse del computer/Distributed Transaction Coordinator e fai clic con il pulsante destro del mouse su ciascuno dei DTC elencati. Questo genererà l'errore se i tuoi guid non sono allineati.

  • Aprire services.msc. Trova il Distributed Transaction Coordinator (se ce ne sono due, stai cercando quello con il guid nel suo nome)
  • Apri le proprietà di questo DTC. Copia il guid dal "percorso all'eseguibile"
  • Apri regedit. Trova HKLM \ Cluster \ ResourceTypes \ Distributed Transaction Coordinator
  • Confronta il valore ClusterDefaultResource al guid che hai copiato. Se sono diversi, il prossimo passo dovrebbe risolvere le cose. In caso contrario, questa non è la tua risposta.
  • Eseguire il backup del valore corrente. Modificare la proprietà ClusterDefaultResource: incollare il guid copiato dalle proprietà DTC services.msc. Dovrai farlo su ogni nodo nel tuo cluster.
  • Con fortuna, questo ha risolto il tuo problema.
Problemi correlati