MSDTC - связь с основным менеджером транзакций не выполнена

Я получаю сообщение об ошибке "Связь с основным менеджером транзакций не удалась", когда я пытаюсь запустить приложение из visual studio 2010. У меня есть поиск в google для этой проблемы, я пробовал все возможные решения для устранения этой ошибки.

Здесь я внес изменения в свои свойства 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

Пожалуйста, дайте мне знать, если кто-нибудь знает решение этой проблемы.

Спасибо Маной Ситапара

4 ответа

Попробуйте подключить DTC через брандмауэр.


Загрузите DTCPing на всех компьютерах, участвующих в распределенной транзакции, и запустите их.

В большинстве случаев он даст вам точную ошибку и то, что неправильно (например, идентичные CID) и т.д.

Возможные причины:

  • Компьютеры недоступны по имени NetBIOS. В этом случае вам нужно настроить файл hosts для добавления сопоставлений IP/hostname или, если в домене, добавить для них псевдонимы DNS.
  • Серверы - это виртуальные машины, и они были клонированы из одного экземпляра виртуальной машины. В этом случае идентификаторы MSDTC идентичны, и вам необходимо установить/переустановить MSDTC (DTCping сообщит вам об этом).


Проверьте руководство по поиску и устранению неполадок MSDTC, в котором перечислены дублирующие CID как потенциальная проблема. Вы можете использовать следующую Powershell script для обнаружения повторяющихся CID и при необходимости переустановить MSDTC с помощью 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." 
 }
}


При попытке настроить DTC и MSMQ на кластере я получил ошибку связи. В моем случае основной ошибкой было "Ran out of memory". Я смог отправить транзакционные сообщения из кластера на другой сервер, но не вернулся с этого сервера в кластер. Моя служба исключила бы это исключение:

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)

В этой статье было очень неясное решение: http://www.nervousadmin.com/category/microsoft/windows/dtc/

Подводя итог:

В реестре есть ключ для ключевого ClusterDefaultResource в HKLM\Cluster\ResourceTypes\Distributed Transaction Coordinator, который должен согласовываться с аргументом guid на пути DTC к исполняемому файлу.

Другим симптомом этой проблемы является то, что вы получите ошибку из памяти, если попытаетесь получить доступ к свойствам DTC через консоль управления компонентами. Посмотрите в дереве консоли в разделе "Службы компонентов/Компьютеры/Мой компьютер/Координатор распределенных транзакций" и щелкните правой кнопкой мыши по каждому из кодов DTC, перечисленных там. Это вызовет ошибку, если ваши направляющие не выровнены.

  • Откройте services.msc. Найдите координатор распределенных транзакций (если их два, вы ищете его с именем guid)
  • Откройте эти свойства DTC. Скопируйте направляющую из "пути к исполняемому файлу"
  • Откройте regedit. Найти HKLM\Cluster\ResourceTypes\Distributed Transaction Coordinator
  • Сравните значение ClusterDefaultResource с направляющим, который вы скопировали. Если они разные, следующий шаг должен исправить ситуацию. Если нет, это не ваш ответ.
  • Резервное копирование текущего значения. Отредактируйте свойство ClusterDefaultResource: вставьте направляющее устройство, скопированное из свойств DTC services.msc. Вам нужно будет сделать это на каждом node в вашем кластере.
  • Если вам повезет, это решило вашу проблему.

licensed under cc by-sa 3.0 with attribution.