Я много гуглил в последние дни и проверял данные и реестр, но не нашел решения или даже основной причины проблемы:
У нас есть несколько веб-служб WCF, которые взаимодействуют друг с другом (и, наконец, с базой данных SQL Server), используя распределенные транзакции как «Разрешенные» (не «Обязательные»). У нас есть веб-ферма (2008R2, IIS7 с WFF), где на одном узле работает, а на другом нет. Транзакции просто не проходят.
Я написал тестовое приложение, в котором размещена цепочка из трех сервисов, которые ничего не делают, кроме как звонят друг другу. Последний возвращает true. Эта цепочка будет иметь распределенные транзакции на одном компьютере (что можно увидеть, распечатав идентификатор распределенной транзакции), а на другом распределенных транзакций не будет. Однако ошибок нет. Просто не приходит транзакция.
Я проверил диалоги, которые открываются при звонке
dcomcnfg.exe => Компьютер => Мой компьютер => Контроллер распределенных транзакций => Локальный DTC => Свойства
и они абсолютно одинаковы на обеих машинах. Просто чтобы убедиться, что я экспортировал ключи реестра ниже HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
. Единственными различиями между машинами были клавиши KtmRmTmIdentifier
и XAKeyCNGKeyDataBlob
. Будучи разными машинами, я ожидал, что они будут другими. Все настройки были одинаковыми.
Теперь, когда один и тот же двоичный исполняемый файл работает на одной машине и дает сбой на другой машине, я сильно подозреваю, что виновата настройка нашей машины, но у меня действительно нет возможных вариантов, где искать различия или как выяснить, что не так.
Есть ли у кого-нибудь идеи, что еще я могу проверить или какой тест я могу запустить, чтобы выяснить, в чем проблема?
Дополнительная информация:
Настройки выглядят так: