Ответ 1
Попробуйте подключить DTC через брандмауэр.
Я получаю сообщение об ошибке "Связь с основным менеджером транзакций не удалась", когда я пытаюсь запустить приложение из 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
Пожалуйста, дайте мне знать, если кто-нибудь знает решение этой проблемы.
Спасибо Маной Ситапара
Попробуйте подключить DTC через брандмауэр.
Загрузите DTCPing
на всех компьютерах, участвующих в распределенной транзакции, и запустите их.
В большинстве случаев он даст вам точную ошибку и то, что неправильно (например, идентичные CID) и т.д.
Возможные причины:
hosts
для добавления сопоставлений IP/hostname или, если в домене, добавить для них псевдонимы DNS.Проверьте руководство по поиску и устранению неполадок 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, перечисленных там. Это вызовет ошибку, если ваши направляющие не выровнены.