我在一个单元测试中遇到了问题,Oracle抛出异常并显示消息“无法在分布式事务中注册”。我们使用ODP.net和NHibernate。在嵌套事务中向数据库提交一定数量的提交后,就会出现此问题。令人恼火的是,这个问题发生在持续集成服务器(Windows Server 2003 R2 SP1)上,而不是我的开发机器(XP SP2)。
以下是该问题的简要复现:
我们使用的连接字符串是:
在构建服务器上,它可靠地在第五次迭代外部循环(j)时中断。既然它在我的本地机器上通过了,我想知道这是否达到了某种已配置的事务或连接限制?
任何人有什么猜测可以尝试吗?显然解决此问题的明显方法是更改代码以更好地处理此情况,但我只想了解为什么它在一台机器上工作而在另一台机器上不工作。谢谢!
以下是该问题的简要复现:
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();
}
}
}
我们使用的连接字符串是:
显然,这看起来有点笨重,但产品代码的情况更为复杂(外部事务循环和内部事务循环非常分离)。Data Source=server;User Id=user;Password=password;Enlist=true;
在构建服务器上,它可靠地在第五次迭代外部循环(j)时中断。既然它在我的本地机器上通过了,我想知道这是否达到了某种已配置的事务或连接限制?
任何人有什么猜测可以尝试吗?显然解决此问题的明显方法是更改代码以更好地处理此情况,但我只想了解为什么它在一台机器上工作而在另一台机器上不工作。谢谢!