我们有一个可以与SQL Server或Oracle后端一起使用的服务。我们刚刚开始添加消息传递功能,以允许我们的服务与仅限Oracle的应用程序进行通信,并决定使用NServiceBus。决定放置NServiceBus订阅/队列/等。在应用程序的数据库中,所以NServiceBus总是使用Oracle。
当服务与SQL Server后端一起使用时,一切都很好。但是当我们尝试将服务与Oracle后端(一个与应用程序和NServiceBus使用的数据库完全独立的数据库,通常在不同的服务器上)一起使用时,我们会遇到异常。
异常详情:
connection.Open()
Data Source=foo;User Id=bar;Password=baz
异常文本让我们认为连接正在尝试加入NServiceBus' TransactionScope的。那是对的吗?如果是这样,是否有一些选项我们可以添加到连接字符串或配置连接本身,以避免加入环境TransactionScope吗?
请注意,我们在代码中使用BeginTransaction;我们发现它与TransactionScope并不相称,但我们以前从未在代码中使用TransactionScope,也不想在中使用TransactionScope 无论如何,在我们进入BeginTransaction调用之前,我们正在进行的例外情况正在发生。
答案 0 :(得分:2)
将Enlist=false
放入连接字符串中。
这方面的解决方案有点难以找到,因为每个人似乎都假设您要么使用分布式事务来完成所有连接,要么不想使用分布式事务。但是我最终在documentation中找到了Microsoft Oracle提供程序,您可以将Enlist=false
添加到连接字符串中,以指示您不希望连接自动加入活动的分布式事务(它是'显然仍然可以在以后手动加入分布式交易,但我没有仔细调查,因为它与我们的情况不相关)。