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

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

спасибо Sitapara Манодж

4 ответов


попробуйте разрешить DTC общаться через Брандмауэр.

enter image description here


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

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

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

  1. компьютеры недоступны по имени NetBIOS. В этом случае вы либо должны настроить их hosts файл для добавления сопоставлений IP / hostname или, если в домене, добавьте псевдонимы DNS для них.
  2. серверы являются VMs, и они были клонированы из одного экземпляра VM. В этом случае CIDs MSDTC идентичны, и вам нужно установить/переустановить MSDTC (DTCping скажет вам это).

Регистрация руководство по устранению неполадок MSDTC, в котором перечислены дубликаты CIDs как потенциальная проблема. Для обнаружения дубликатов CIDs и переустановки MSDTC при необходимости с помощью WinRM можно использовать следующий сценарий Powershell:

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 на кластере. В моем случае основная ошибка была "исчерпана память."Я смог отправить транзакционные сообщения из кластера на другой сервер, но не обратно с этого сервера на кластер. Моя служба выбросила бы это исключение:

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/

подведем итоги:

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

другой симптом этой проблемы заключается в том, что при попытке получить доступ к свойствам DTC через компонент вы получите ошибку из памяти Консоль управления службами. Посмотрите в дереве консоли под Component Services / Computers/My Computer / Distributed Transaction Coordinator и щелкните правой кнопкой мыши на каждом из перечисленных там DTCs. Это вызовет ошибку, если ваши GUID не выровнены.

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