Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf TransactionFlow(TransactionFlowOption.Mandatory)OperationBehavior(TransactionScopeRequired=true_Wcf - Fatal编程技术网

Wcf TransactionFlow(TransactionFlowOption.Mandatory)OperationBehavior(TransactionScopeRequired=true

Wcf TransactionFlow(TransactionFlowOption.Mandatory)OperationBehavior(TransactionScopeRequired=true,wcf,Wcf,我正试图了解WCF交易,但有一个概念让我感到困惑。交易行为的区别是什么 TransactionFlow(TransactionFlowOption.Mandatory) 及 据我所知,从文档中可以看出,它们是实现同一目标的两种方式,但我无法真正理解 干杯 Stephen当一个方法需要事务作用域时,WCF将创建一个事务来执行该方法的逻辑。事务流允许您链接事务,以便需要事务的多个服务方法都可以加入到单个事务中,而不是单独的事务中 考虑以下简单设置: [OperationBehavior(Tran

我正试图了解WCF交易,但有一个概念让我感到困惑。交易行为的区别是什么

TransactionFlow(TransactionFlowOption.Mandatory) 

据我所知,从文档中可以看出,它们是实现同一目标的两种方式,但我无法真正理解

干杯


Stephen

当一个方法需要事务作用域时,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创建的同一事务。如果途中出现任何故障,或者saction未提交,整个链将回滚。如果事务未流动,则每个方法都将启动一个事务,该事务自行运行,对调用的其他方法没有影响。

OK,因此TransactionScopeRequired=true要求操作有一个事务,但TransactionFlowOption。强制执行多个操作要在同一事务中执行的操作。TransactionFlowOption.Mandatory将从调用函数中“流动”,或在当前事务的标识符下继续(如果存在此类事务)。如果没有预先存在的事务,则此指令将导致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()