Как я могу надежно проверить, что MSDTC способствовал транзакцию распределенной транзакции?
Это при использовании TransactionScope в .NET.
В настоящее время коллега тестирует это путем закрытия координатора на его машине - если исключение выдается, это взято в качестве доказательства, что попытка способствовать транзакции произошла. Действительно ли это - допустимый тест?
Я думаю, что ваш тест в порядке, хотя вы должны убедиться, что получаете исключение DTC, а не какое-либо другое исключение.
Еще кое-что, что вы можете сделать:
Вы также можете запустить SQL Profiler и в разделе Транзакции отслеживать DTCTransaction.
С точки зрения кода, вы можете обработать событие DistributedTransactionStarted и записать сообщение при запуске распределенной транзакции.
Или вы можете просто добавить сообщения журнала для регистрации System.Transactions.Transaction.Current.
TransactionInformation.DistributedIdentifier
перед завершением транзакции. Если значение Guid.Empty {00000000-0000-0000-0000-000000000000}, то это не распределенная транзакция, в противном случае транзакция была переведена в распределенную транзакцию.
Вы сказали, что используете SQL Server 2008. Какую версию .NET вы используете? Это 3.5? Если вы используете SQL Server 2008 и .NET 3.5 , тогда вы должны иметь возможность открывать несколько подключений (с использованием одной и той же строки подключения) к одной и той же базе данных в одной транзакции без перехода к распределенной транзакции. Чтобы это работало, вам необходимо закрыть первое соединение, прежде чем открывать второе соединение.
Если окажется, что все условия выполнены и транзакции все еще увеличиваются, я бы:
ОБНОВЛЕНИЕ: Координатор распределенных транзакций (MSDTC) и транзакция FAQ объединяет большой список ресурсов MSDTC.