TransactionFlow(TransactionFlowOption.Mandatory) 操作行为(TransactionScopeRequired = true

2024-06-19

我正在尝试了解 WCF 事务,但对一个概念感到困惑。行为上有什么不同

TransactionFlow(TransactionFlowOption.Mandatory) 

and

OperationBehavior(TransactionScopeRequired = true)

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

Cheers,

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 创建的相同事务。如果过程中出现任何问题或者事务未提交,整个链就会回滚。如果事务不流动,每个方法都会启动一个事务,该事务独立运行,并且对调用的其他方法没有影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TransactionFlow(TransactionFlowOption.Mandatory) 操作行为(TransactionScopeRequired = true 的相关文章

随机推荐