Я вижу проблему в модульном тесте, где Oracle выдает исключение с сообщением "Невозможно подключиться к распределенной транзакции". Мы используем ODP.net и NHibernate. Эта проблема возникает после выполнения определенного количества коммитов в базе данных внутри вложенных транзакций. Досадно, что это происходит на сервере непрерывной интеграции (Windows Server 2003 R2 SP1), а не на моем компьютере разработчика (XP SP2).
Это маленькая (ish) копия вопроса:
using (new TransactionScope())
{
for (int j = 0; j < 15; j++)
{
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required))
using (var session = sessionFactory.OpenSession())
{
for (int i = 0; i < 200; i++)
{
var obj = [create new NHibernate mapped obj]
session.Save(obj);
}
session.Flush();
transactionScope.Complete();
}
}
}
Используемая строка подключения:
Источник данных = сервер; Идентификатор пользователя = пользователь; Пароль = пароль; Enlist = true;
Очевидно, это выглядит сложным делом, но случай с кодом продукта более сложен (внешний цикл транзакции и внутренний цикл транзакции очень разделены).
На сервере сборки он надежно запускается на пятой итерации внешнего цикла (j). Видя, как он проходит на моей локальной машине, мне интересно, не достигает ли он какого-то настроенного лимита транзакций или соединений?
У кого-нибудь есть догадки, которые я могу попробовать? Очевидный способ исправить это - изменить код, чтобы лучше справляться с этой ситуацией, но я просто хотел бы понять, почему он работает на одной машине, а не на другой. Спасибо!