Менеджер транзакций MSDTC не смог вытащить транзакцию из диспетчера транзакций источника из-за проблем связи

Я разместил свое веб-приложение на сервере 1 и свою базу данных на сервере 2

Но я получаю следующую ошибку

"Связь с соответствующим менеджером транзакций не удалась".

Я гуглил и нашел сообщение, в котором упоминалось, что это проблема DTC (распределенная транзакция). Я включил DTC на server2 (сервер БД) и сделал исключение из него в брандмауэре.

enter image description here

enter image description here

Но все та же ошибка.

Вот полная трассировка стека

Сообщение: System.Transactions.TransactionManagerCommunicationException: сбой связи с базовым менеджером транзакций. ---> System.Runtime.InteropServices.COMException: диспетчеру транзакций MSDTC не удалось получить транзакцию из исходного менеджера транзакций из-за проблем со связью. Возможные причины: брандмауэр присутствует и у него нет исключения для процесса MSDTC, две машины не могут найти друг друга по их именам NetBIOS или поддержка сетевых транзакций не включена для одного из двух менеджеров транзакций. (Исключение из HRESULT: 0x8004D02B) в System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, байт [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel & IsolationLevel, ITransactionShim & transactionShim) при System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken (байт [] propagationToken)

Добрый совет

Ответ 1

У нас была такая же ситуация, и не раз. Каждый раз это было одно из следующего:

  • IP-адрес DNS для сервера устарел (как указано в сообщении об ошибке: "две машины не могут найти друг друга по именам NetBIOS" ). Вы можете проверить это, попробовав ping servername с одного сервера на другой в командной строке. Если ping по имени терпит неудачу и ping по IP успешно (или ping по имени возвращает неправильный IP-адрес), вы должны поговорить с системными администраторами, чтобы посмотреть DNS/DHCP.

  • Серверы создаются как изображение предварительно сконфигурированного сервера (например, если вы работаете с виртуальными машинами, а вместо того, чтобы делать новую установку для каждого из серверов, вы просто клонируете изображение). Это проблема, потому что DTC имеет внутренний "Идентификатор" - и в случае клонирования изображений обе ваши установки теперь имеют одинаковый идентификатор DTC и не смогут общаться друг с другом. Решение состоит в том, чтобы просто удалить и установить DTC снова.

Надеюсь, что это поможет.

Ответ 2

Что нужно проверить:

  • Вы выполнили эту настройку на обоих серверах?
  • Являются ли оба сервера членами одного домена?
  • Вы проверили журнал событий?

Ответ 3

Я только столкнулся с этой проблемой и погуглил ее, затем я получил эту страницу. Наконец я решил эту проблему, вытянув сетевой кабель. С помощью Wi-Fi все работает гладко. Надеюсь, что это даст вам другой угол, чтобы справиться с этим.

Ответ 4

У меня была такая же проблема при подключении к удаленному серверу SQl. Решением в моем случае было добавить "enlist=false" в строку подключения.