我试图了解 WCF 事务,但在一个概念上苦苦挣扎。行为方式有什么不同
TransactionFlow(TransactionFlowOption.Mandatory)
和
OperationBehavior(TransactionScopeRequired = true)
据我从文档中可以看出,它们是实现同一目标的两种方式,但我无法真正弄清楚。
干杯,
斯蒂芬
我试图了解 WCF 事务,但在一个概念上苦苦挣扎。行为方式有什么不同
TransactionFlow(TransactionFlowOption.Mandatory)
和
OperationBehavior(TransactionScopeRequired = true)
据我从文档中可以看出,它们是实现同一目标的两种方式,但我无法真正弄清楚。
干杯,
斯蒂芬
当方法需要事务范围时,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 创建的相同事务。如果在此过程中出现任何故障或事务未提交,则整个链都会回滚。如果事务没有流动,每个方法都会启动一个事务,该事务会自行执行,并且对调用的其他方法没有影响。