因此,在WCF中,要将事务从客户端流向服务器,您必须拥有
[OperationBehavior(TransactionScopeRequired = true)]
在您的实例方法和
上 [TransactionFlow(TransactionFlowOption.Allowed)]
在您的服务界面上。一切正常。但是,我发现了这一点 即使客户端不流动,服务器也会分配TX。这似乎很浪费
我理解.NET事务可以是轻量级的。我反应过度了吗?我应该 信任.NET并让它分配一个不必要的本地事务?我很担心 不必要的批量,甚至更担心它可能会被提升为MSDTC参与
编辑1:
使这种笨拙的手头操作是:
操作3,读取必须如上所述标记为transactionscoperequired。否则,由于TX未流动,因此读取超时。我发现这有点奇怪,粗暴强迫TX存在以进行只读操作。这意味着我必须使用TransactionScopeRequired = true标记系统中的大多数WCF调用
答案 0 :(得分:1)
事务是一种微小的.NET内存数据结构。没什么。资源征集的成本是多么昂贵。也就是说,你将至少有一个这样的征兵。
事务通常 help 具有数据库吞吐量,尤其是写入时。
您可能希望您的方法无论如何都要在事务下执行,因为您希望效果是原子的并且读取是一致的。客户是否请求转账并不重要。
甚至更担心它可能会被提升为MSDTC参与
这是一个有效的问题。这就是说分布式事务最好避免,因为它们很慢,而且它们根本不适用于某些HA策略,如镜像和AG。