问题标签 [system.transactions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
17278 浏览

c# - 使用 TransactionScope:System.Transactions.TransactionAbortedException:事务已中止

我们正在尝试使用下面的代码进行间接嵌套事务,.NET 3.5 和 SQL Server 2005。

MSDN 说,当使用 TransactionScope 时,只要应用程序在 Transaction 中打开第二个连接(甚至是同一个数据库),事务就会升级。

有时,事务失败,没有升级到 DTC,我们得到以下作为内部堆栈跟踪,

谁能帮我找出失败的原因?

0 投票
3 回答
275 浏览

mysql - 如何在 Mysql 中原子选择行?

我有 5 个以上的进程同时从同一个 mysql 表中选择行。每个进程选择 100 行,处理它并删除选定的行。

但是我选择并处理了 2 次或更多次相同的行。

如何避免它发生在 MYSQL 端或 Ruby on Rails 端?

该应用程序基于 Ruby On Rails 构建...

0 投票
2 回答
5655 浏览

c# - 将 TransactionScopeOption.Suppress 与 Sql Server Compact 4 一起使用

我在使用带有实体框架的 Sql Server CE 4 和System.Transactions.TransactionScope.

下面的简化代码来自演示问题的单元测试。

这个想法是使innerScope块(没有事务)成功或失败而不影响outerScope块(“环境”事务)。这是TransactionScopeOption.Suppress.

但是,代码失败了,因为似乎整个SomeTable表都被第一次插入锁定了outerScope。在代码中指示的位置,将引发此错误:

“SQL Server Compact 等待锁定超时。设备的默认锁定时间为 2000 毫秒,桌面为 5000 毫秒。可以使用 ssce:默认锁定超时属性在连接字符串中增加默认锁定超时。[会话 id = 2,线程 id = 2248,进程 id = 13516,表名 = SomeTable,冲突类型 = x 锁(x 块),资源 = PAG(idx):1046]"

因此,根据http://msdn.microsoft.com/en-us/library/ms172001,似乎“事务范围内的事务在隔离级别设置为 Serializable 的情况下执行”

但是,使用以下代码片段来更改 TransactionScope 的隔离级别并没有帮助:

在相同的位置抛出相同的异常。

It seems the only way to avoid this is to call outerScope.Complete() before entering the innerScope block. But this would defeat the purpose.

What am I missing here? Thanks.

0 投票
2 回答
1359 浏览

sqltransaction - SqlClient.SqlTransaction 与 System.Transactions

我们在设置MSDTCSystemTransactions时经常遇到一些问题,现在正在考虑用SqlTransactions.

我对上述差异以及我们可能遇到的问题感兴趣。

0 投票
1 回答
3014 浏览

c# - 跨进程使用事务

我正在尝试使用 System.Transactions (TransactionScope) 来协调一组进程,每个进程都执行一些数据库工作。最终,所有进程都需要通过一个父进程自动提交或回滚。不幸的是,到目前为止我没有尝试过任何工作。

我的基本策略是在父进程中TransactionScope,将其保存到一个文件中,然后调用一个子进程,该子进程加载文件,使用它自己的TransactionScope中的事务,并返回给父进程。

但这对我不起作用。当我打电话给第一个孩子回来时,我有时会看到父事务已被标记为已中止。尝试克隆它然后抛出 TransactionAbortedException。

当第二个孩子尝试反序列化事务时,我也看到了异常,我得到了一个代码为 0x8004d00e 的 TransactionException。

我正在尝试跨 AppDomains 和进程的 TransactionScope以及http://blogs.microsoft.co.il/blogs/sasha/archive/2010/04/30/propagating-a-transaction-across-appdomains 中描述的内容。 .aspx _ 无论如何,没有运气。

以下是我尝试过的一些事情,但没有成功:

  1. 从加载的事务中通过 DependentClone() 在子进程中创建 DependentTransaction
  2. 在将事务保存到文件之前,在父进程中通过 DependentClone() 创建 DependentTransaction
  3. 在将事务保存到文件之前,在父进程中创建 Clone()
  4. 使用序列化保存事务
  5. 使用 TransactionInterop.GetTransactionFromTransmitterPropagationToken() 保存交易
  6. 在父级的 TransactionScope 之前显式打开连接
  7. 在父级中显式登记事务
  8. 显式地在孩子内部登记交易
  9. 完成/未完成父级的范围
  10. 完成/未完成孩子的范围
  11. 在父级显式创建 CommittableTransaction

这是一条异常消息:

System.Transactions.TransactionException:事务已被隐式或显式提交或中止。---> System.Runtime.InteropServices.COMException:事务已被隐式或显式提交或中止(来自 HRESULT 的异常:0x8004D00E)

另一个(使用 DependentClone() 时):

System.Transactions.TransactionAbortedException:事务已中止。在 System.Transactions.TransactionStatePromotedAborted.CreateBlockingClone(InternalTransaction tx) 在 System.Transactions.DependentTransaction..ctor(IsolationLevel isoLevel, InternalTransaction internalTransaction, 布尔阻塞) 在 System.Transactions.Transaction.DependentClone(DependentCloneOption cloneO ption)

任何想法我做错了什么?我已经尝试了很多这种排列,但没有任何运气。

下面是一些代码(并没有试图演示上述所有变体):

0 投票
0 回答
153 浏览

c# - 具有显式实现的隐式事务

作为框架开发人员,我想提供一个跨线程工作的隐式事务范围环境。

这意味着可以从现有的环境事务(如果有)创建 CommittableTransaction。

我可以从环境 Transaction 创建一个 CommitableTransaction 吗?

我将尝试使用此处解释的概念来实现新的 TransactionScope 。

0 投票
0 回答
188 浏览

system.transactions - TransactionInDoubt" 使用 System.Transactions,显然在 TransactionScope.Complete()

我们的系统中有这个问题。我们正在使用System.Transactions和合作TransactionScope(在这种情况下,大多数情况下,绝对是)。我们刚刚迁移EnterpriseServicesSystemTransactions最近,在繁重的多线程工作期间,我们多次收到此错误:

System.Transactions.TransactionInDoubtException: The transaction is in doubt. ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.ReadByte() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest) at System.Data.SqlClient.SqlDelegatedTransaction.SinglePhaseCommit(SinglePhaseEnlistment enlistment)

它显然是在Scope.Complete().

我已经阅读了一些关于 的内容TransactionInDoubt,它可能发生在升级到 的过程中DTC,并且 SQL 或 MSDTC 可能存在轻微的连接问题。但是然后- Timeout Expired 是什么SqlException?超时到底在哪里?在提交???

在过去的几天里,我一直在扫描网络,并且到处都出现了一些情况,但没有好的答案。

帮助任何人??

0 投票
1 回答
5379 浏览

.net - Promote Method returned an invalid Value for the Distributed transaction with TransactionScope and ODP.net

Upon opening a second connection inside of a transaction (a point at which I would expect a promotion) I recieve the above mentioned error.

0 投票
0 回答
76 浏览

c# - System.Transactions 程序集加载

我正在尝试列出 AppDomain 中所有引用的程序集和程序集。每次我得到 25 个 ref.assemblies 之后 - AppDomain 中有 39 个程序集。但是,如果我再调用AppDomain.CurrentDomain.GetAssemblies()一次,我会再得到一个程序集——“System.Transactions”。因此,要列出所有程序集,我使用以下代码:

其中GetRefAssemblies()加载并返回所有引用的程序集。这是输出的截图:[ http://i.stack.imgur.com/sknC6.png]

为什么在 AppDomain 中扫描程序集后加载 System.Transactions?我应该如何优化我的代码?

0 投票
1 回答
3371 浏览

c# - TransactionScope 在 Disposed 时抛出 TransactionAbortedException

我有以下情况:

  • 父进程启动 TransactionScope,使用 TransactionInterop.GetTransmitterPropagationToken 创建标识事务的令牌,将数据插入数据库。TransactionScope 完成。
  • 启动另一个进程,使用上面提到的令牌创建事务,然后用于创建事务范围。此过程还将数据插入数据库。TransactionScope 完成并被释放。
  • 父进程此时尝试释放其 TransactionScope,并抛出 TransactionAbortedException。该异常没有给出任何不能提交的理由。

堆栈跟踪:

这是应用程序的代码:

问题:

  • 为什么它不能提交?
  • 在这种情况下是否可以使用 TransactionScope(我阅读了答案使用跨进程的事务,但我想使用 TransactionScope)?如何?