TransactionFlow(TransactionFlowOption.Mandatory)OperationBehavior(TransactionScopeRequired = true

时间:2012-07-11 20:00:23

标签: wcf

我正试图绕过WCF交易,但却苦苦于一个概念。

的行为有何不同?
TransactionFlow(TransactionFlowOption.Mandatory) 

OperationBehavior(TransactionScopeRequired = true)

据我从文档中可以看出,它们有两种实现相同目的的方式,但我无法弄明白。

干杯,

斯蒂芬

1 个答案:

答案 0 :(得分: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创建的相同事务。如果在此过程中出现任何故障或未提交事务,整个链将被回滚。如果事务没有流动,每个方法都会启动一个自己行动的事务,并且对被调用的其他方法没有影响。