C# / WCF TransactionScopeOption.Required

本文关键字:Required TransactionScopeOption WCF | 更新日期: 2023-09-27 18:32:34

我有3个关于TransactionScopeOption的问题,这让我发疯,我在网上找不到他们。

答:我很难思考 实际上我什么时候必须编写这段代码? 为什么我不应该把 DoSomething2(( 放在 TransactionScope4 之外,在 TransactionScope3 中?
二.在此之后:TransactionScope4.Complete((,TransactionScope3 也是完整的,因为它是同一个 TransactionScope,对吧?
三.在 WCF 中,当我在客户端中使用 TransactionScope 并在其中调用某些服务的方法时,每个方法都使用我在客户端中创建的 TransactionScope 或 Creat new ?它为什么要创造新的?如果该方法创建一个新方法,这就是属性:事务自动完成存在的原因吗?

using (TransactionScope TransactionScope3 = new TransactionScope())
            {
                Service1.DoSomething1();
                using (TransactionScope TransactionScope4 = new TransactionScope(TransactionScopeOption.Required))
                {
                    Service1.DoSomething2();
                    TransactionScope4.Complete();
                }
                TransactionScope3.Complete();
            }

C# / WCF TransactionScopeOption.Required

这里有一个关键句子:

如果 TransactionScope 对象创建了事务,则 资源管理器之间的实际提交工作发生在 End Using 语句中。如果它没有创建事务,则每当 CommittableTransaction 对象的所有者调用 Commit 时,就会发生提交。

因此,要回答问题 B,不,您对 TransactionScope4.Complete() 的调用不会提交事务,因为该 TransactionScope 实例将重用TransactionScope3 的事务。

对于回答 C,如果指示 WCF 服务需要事务,则如果在客户端上创建了现有的事务范围,则 WCF 将不会启动新事务(并且不会在服务调用结束时提交,原因与上述相同(。但是,如果客户端没有打开的事务范围,则 WCF 将启动一个新的事务范围,并在服务调用结束时自动提交或回滚。