【发布时间】:2019-11-29 04:37:50
【问题描述】:
我正在尝试将一个项目转换为 .Net Core,但遇到了一个绊脚石。
当我在事务范围内打开两个不同的 oracle 连接时,收到以下错误:
"Operation is not supported on this platform."
" at OracleInternal.MTS.MTSRMManager.CCPEnlistDistributedTxnToSysTxn(OracleConnectionImpl connImpl, Transaction txn, MTSTxnRM txnRM, MTSTxnBranch txnBranch)
at OracleInternal.MTS.MTSRMManager.CCPEnlistTransaction(OracleConnectionImpl connImpl, Transaction transaction, MTSTxnRM txnRM, MTSTxnBranch txnBranch)
at OracleInternal.ConnectionPool.PoolManager`3.GetEnlisted(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection connRefForCriteria)
at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, OracleConnection connRefForCriteria)
at Oracle.ManagedDataAccess.Client.OracleConnection.Open()"
以下代码在打开第二个连接时会导致此错误。 此外,这不会发生在标准框架 Oracle.ManagedDataAccess 上。它只发生在 Oracle.ManagedDataAccess.Core 版本上。
我的猜测是它看起来与连接池有关,但我可以使用一些帮助。
如果您对每个连接使用相同的连接字符串,则没有问题。仅当您有两个不同的连接时才会发生。
using (TransactionScope scope = new TransactionScope())
{
using (var conn = new OracleConnection(connectionString1))
{
conn.Open();
}
using (var conn = new OracleConnection(connectionString2))
{
conn.Open(); //Exception occurs here
}
scope.Complete();
}
【问题讨论】: