2012-07-06 12 views
15

Otrzymuję komunikat o błędzie "Podczas próby uruchomienia mojej aplikacji z Visual Studio 2010." Mam problem z komunikacją z bazowym menedżerem transakcji 2010. Mam wyszukiwanie w Google dla tego problemu, I wypróbowałem wszystkie możliwe rozwiązania, aby rozwiązać ten błąd.MSDTC - Komunikacja z bazowym menedżerem transakcji nie powiodła się

Tutaj dokonałem zmiany w moich właściwościach 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 

Proszę dać mi znać, jeśli ktoś zna rozwiązanie tego problemu.

Dzięki Manoj Sitapara

+2

Czy włączyłeś zaporę ogniową? –

+0

Czy oba komputery są dostępne przez nazwę NetBIOS (ich nazwę komputera)? Po prostu spróbuj ping. W przeciwnym razie uruchom DTCPing. –

Odpowiedz

18

Spróbuj pozwalając DTC do komunikowania się przez zaporę.

enter image description here

12

Pobierz DTCPing na wszystkich komputerach uczestniczących w transakcji rozproszonej i uruchom go.

Większość czasu to daje dokładny opis błędu, a co złe (jak identyczne CID'S) itd

Możliwe przyczyny:

  1. komputery nie są osiągalne wg nazwy NetBIOS. W takim przypadku musisz zmienić ich plik hosts, aby dodać mapowania IP/nazwę hosta lub, jeśli w domenie, dodać aliasy DNS dla nich.
  2. Serwery są maszynami wirtualnymi i zostały sklonowane z tej samej maszyny wirtualnej. W tym przypadku identyfikatory CID MSDTC są identyczne i musisz zainstalować/ponownie zainstalować MSDTC (DTCping powie ci to).
+0

Dzięki za to - mój problem polegał na tym, że miałem serwer WWW na jednej domenie i mój serwer bazy danych na innym. DTCping spowodował błąd, że w pełni kwalifikowana domena nie jest nazwą NetBIOS. Musiałem dodać wpisy dla innego komputera do każdego pliku hostów i dostosować mój ciąg połączenia. – ravuya

2

Sprawdź numer MSDTC troubleshooting guide, który zawiera duplikaty identyfikatorów CID jako potencjalnych problemów. Można użyć następującego skryptu PowerShell do wykrywania duplikatów identyfikatory klientów i ponownie zainstalować usługę MSDTC w razie potrzeby stosując 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

mam uszkodzoną błąd komunikacji podczas próby utworzenia DTC i MSMQ w klastrze. W moim przypadku podstawowym błędem było "Zabrakło pamięci". Mogłem wysyłać wiadomości transakcyjne z klastra na inny serwer, ale nie mogłem z niego wrócić do klastra. Moje usługi rzucał ten wyjątek:

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) 

Ten artykuł miał bardzo niejasne rozwiązanie: http://www.nervousadmin.com/category/microsoft/windows/dtc/

Podsumowując:

Istnieje GUID w rejestrze do klucza ClusterDefaultResource pod HKLM \ Cluster \ ResourceTypes \ Distributed Transaction Coordinator, który musi być zgodny z argumentem guid na ścieżce usługi DTC do pliku wykonywalnego.

Innym symptomem tego problemu jest błąd braku pamięci w przypadku próby uzyskania dostępu do właściwości DTC za pośrednictwem konsoli zarządzania Component Services. Zajrzyj do drzewa konsoli w obszarze Component Services/Computers/My Computer/Distributed Transaction Coordinator i kliknij prawym przyciskiem myszy na każdy z wymienionych DTC. Spowoduje to wyświetlenie błędu, jeśli twoje wiersze nie są wyrównane.

  • Otwórz services.msc. Znajdź koordynator transakcji rozproszonych (jeśli są dwa, szukany jest ten z guid w nazwie)
  • Otwórz te właściwości DTC. Skopiuj kod GUID z "ścieżki do pliku wykonywalnego"
  • Otwórz regedit. Znajdź HKLM \ Cluster \ ResourceTypes \ Koordynator transakcji rozproszonych
  • Porównaj wartość ClusterDefaultResource z skopiowanym przewodnikiem. Jeśli są różne, następny krok powinien naprawić rzeczy. Jeśli nie, to nie jest twoja odpowiedź.
  • Wykonaj kopię zapasową bieżącej wartości. Edytuj właściwość ClusterDefaultResource: wklej kod GUID skopiowany z właściwości DTC services.msc. Będziesz musiał to zrobić na każdym węźle w klastrze.
  • Przy odrobinie szczęścia rozwiązało to twój problem.