gpt4 book ai didi

oracle - TransactionScope 处置失败

转载 作者:行者123 更新时间:2023-12-02 03:54:49 25 4
gpt4 key购买 nike

我在基于 Silverlight 和 RIA 服务的项目中使用 TransactionScope 类。每次我需要保存一些数据时,我都会创建一个 TransactionScope 对象,使用 Oracle ODP 保存我的数据,然后在我的 TransactionScope 对象上调用 Complete 方法并释放对象本身:

public override bool Submit(ChangeSet changeSet)
{
TransactionOptions txopt = new TransactionOptions();
txopt.IsolationLevel = IsolationLevel.ReadCommitted;
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required, txopt))
{
// Here I open an Oracle connection and fetch some data
GetSomeData();

// This is where I persist my data
result = base.Submit(changeSet);

tx.Complete();
}

return result;
}

我的问题是,第一次调用 Submit 方法时一切正常,但如果我第二次调用它,调用 Complete 后执行会卡住几分钟(所以,当处理 tx),然后我得到 Oracle 错误“ORA-12154”。当然,我已经检查过我的持久性代码没有错误地完成。有什么想法吗?

编辑:今天我重复了测试,由于某种原因我得到了一个不同的错误而不是 Oracle 异常:

System.InvalidOperationException: Operation is not valid due to the current state of the object.
at System.Transactions.TransactionState.ChangeStatePromotedAborted(InternalTransaction tx)
at System.Transactions.InternalTransaction.DistributedTransactionOutcome(InternalTransaction tx, TransactionStatus status)
at System.Transactions.Oletx.RealOletxTransaction.FireOutcome(TransactionStatus statusArg)
at System.Transactions.Oletx.OutcomeEnlistment.InvokeOutcomeFunction(TransactionStatus status)
at System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(Object state, Boolean timeout)
at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object state, Boolean timedOut)

最佳答案

我以某种方式设法解决了这个问题,尽管我仍然无法弄清楚它首先出现的原因:我只是将对 GetSomeData 的调用移到了分布式事务的范围之外。由于对 Submit 的调用可能会打开许多​​连接并在数据库上执行任何类型的操作,所以我无法确定为什么 GetSomeData 会导致此问题(它只是打开一个连接,调用一个非常简单的存储函数并返回一个 bool 值)。我只能猜测这与 Submit 方法的实现和/或同一事务范围内多个 oracle 连接的实例化有关。

关于oracle - TransactionScope 处置失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com