3

我试图了解 WCF 事务,但在一个概念上苦苦挣扎。行为方式有什么不同

TransactionFlow(TransactionFlowOption.Mandatory) 

OperationBehavior(TransactionScopeRequired = true)

据我从文档中可以看出,它们是实现同一目标的两种方式,但我无法真正弄清楚。

干杯,

斯蒂芬

4

1 回答 1

3

当方法需要事务范围时,WCF 将创建一个事务来执行该方法的逻辑。事务流允许您将事务链接起来,以便需要事务的多个服务方法都可以连接到一个事务中,而不是单独的事务。

考虑以下简单设置:

[OperationBehavior(TransactionScopeRequired = true)]   
public void ServiceMethod1()
{
    // Executes ServiceMethod2 and ServiceMethod3
}

[OperationBehavior(TransactionScopeRequired = true)]
[TransactionFlow(TransactionFlowOption.Mandatory)]    
public void ServiceMethod2()


[OperationBehavior(TransactionScopeRequired = true)]
[TransactionFlow(TransactionFlowOption.Mandatory)]    
public void ServiceMethod3()

ServiceMethod1 需要一个事务,因此 WCF 启动一个事务,然后调用 ServiceMethod2 和 ServiceMethod3。尽管这些服务也需要事务,但它们是流动的。因此,它们没有启动新事务,而是采用由 ServiceMethod1 创建的相同事务。如果在此过程中出现任何故障或事务未提交,则整个链都会回滚。如果事务没有流动,每个方法都会启动一个事务,该事务会自行执行,并且对调用的其他方法没有影响。

于 2012-07-11T20:19:04.803 回答