WCF交易 - TransactionScopeRequired =我们想要镊子的锤子?

时间:2014-08-04 21:43:26

标签: c# wcf transactions

因此,在WCF中,要将事务从客户端流向服务器,您必须拥有

        [OperationBehavior(TransactionScopeRequired = true)]

在您的实例方法和

        [TransactionFlow(TransactionFlowOption.Allowed)]

在您的服务界面上。一切正常。但是,我发现了这一点 即使客户端不流动,服务器也会分配TX。这似乎很浪费

我理解.NET事务可以是轻量级的。我反应过度了吗?我应该 信任.NET并让它分配一个不必要的本地事务?我很担心 不必要的批量,甚至更担心它可能会被提升为MSDTC参与

编辑1:

使这种笨拙的手头操作是:

  1. 在表A上插入
  2. 插入表B
  3. 阅读表A
  4. 在表C上插入
  5. 操作3,读取必须如上所述标记为transactionscoperequired。否则,由于TX未流动,因此读取超时。我发现这有点奇怪,粗暴强迫TX存在以进行只读操作。这意味着我必须使用TransactionScopeRequired = true标记系统中的大多数WCF调用

1 个答案:

答案 0 :(得分:1)

事务是一种微小的.NET内存数据结构。没什么。资源征集的成本是多么昂贵。也就是说,你将至少有一个这样的征兵。

事务通常 help 具有数据库吞吐量,尤其是写入时。

您可能希望您的方法无论如何都要在事务下执行,因为您希望效果是原子的并且读取是一致的。客户是否请求转账并不重要。

  

甚至更担心它可能会被提升为MSDTC参与

这是一个有效的问题。这就是说分布式事务最好避免,因为它们很慢,而且它们根本不适用于某些HA策略,如镜像和AG。