Как отладить проблемы с DTC? - PullRequest
0 голосов
/ 01 октября 2010

У меня есть модульный тест для некоторого кода, который иногда выдает «Транзакция уже была явно или явно зафиксирована или прервана».исключение.Google дает мне много замечательных обращений, но ни одно из прочитанных, похоже, не применимо.

Если я запускаю модульный тест локально, исключение не выдается.
Если я запускаю его на сервере сборки вручную,исключение никогда не генерируется.

Фактически, единственное время, когда создается исключение, - это ночью во время процесса автоматической сборки и тестирования, когда исключение генерируется примерно в 80% случаев.

Это исключает практически все результаты Google по данному вопросу, поскольку проблемы, которые обычно возникают из-за проблем с подключением к базе данных в транзакциях или брандмауэрах.

Нет событий ни в одном из журналов событий (в сборкекомпьютер, на котором выполняются тесты или сервер базы данных разработки), что указывает на наличие проблемы.Фактически, единственное сообщение о связанном событии, которое я вижу, находится на компьютере базы данных - «MSDTC: истекло время простоя сеанса, разрывая сеанс».Событие происходит вскоре после запуска теста.

Я не уверен, как продолжить пытаться найти эту проблему.

Есть ли какие-либо способы генерирования деталей из кода в состоянии транзакции (я использую C # с .NET 3.5)?

Есть ли способ, чтобы журнал событий давал мне больше информации, чтобы помочь отследить это?

В число участвующих машин входят Windows 2000 Server (db) и Windows Serer 2003 (build), еслиэто помогает найти правильные инструменты.

1 Ответ

0 голосов
/ 01 октября 2010

Тест, который выдает ошибку, вероятно, не там, где ошибка.

Это может быть один из тестов, которые выполняются перед этим тестом, в котором транзакция остается открытой, или какая-то другая проблема.*

Затем, когда тест выполняется, он получает сообщение об ошибке, когда связывается с MSDTC.

Чтобы найти его, нужно просто начать с теста, который не прошел, запустить его один, он должен пройти.Затем добавляйте другие тесты по одному (или нескольким) за раз, пока они не пройдут.

...