WCF Transaction - transactionscoperrequired =当我们想要镊子时一个锤子

本文关键字:一个 transactionscoperrequired Transaction 我们 WCF | 更新日期: 2023-09-27 18:16:26

所以在WCF中从客户端到服务器的事务流必须有

        [OperationBehavior(TransactionScopeRequired = true)]
在你的实例方法和
        [TransactionFlow(TransactionFlowOption.Allowed)]

在服务接口上。一切都很顺利。然而,我觉得这很重要即使客户端没有发送,服务器也会分配一个TX。这似乎很浪费

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

编辑1:

让这个操作变得笨拙的是:

    插入表B
  1. 读取表A
  2. 插入C表

操作3,读必须如上所述标记为transactionscoprequired。否则,由于TX没有流,读取超时。我觉得这有点奇怪,强制TX存在于只读操作中。这意味着我将不得不标记系统中的大多数WCF调用与transactionscoperrequired =true

WCF Transaction - transactionscoperrequired =当我们想要镊子时一个锤子

事务是一个很小的。net内存中的数据结构。这没什么。昂贵的是资源征用。也就是说,你至少会有一次这样的征募。

事务通常帮助处理数据库吞吐量,特别是写操作。

您可能希望您的方法在事务下执行,因为您希望效果是原子的,并且读取是一致的。客户端是否请求传输并不重要。

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

这是一个合理的担忧。也就是说,最好避免分布式事务,因为它们速度很慢,而且它们根本不能与镜像和AG等一些HA策略一起工作。

相关文章: