使用正常返回值的WCF分布式事务流
本文关键字:WCF 分布式 事务 返回值 | 更新日期: 2023-09-27 18:15:08
我有一个应该使用分布式事务的服务。
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public bool ServiceMethod(int parameterPlaceHolder)
{
return SomeOperationResult();
}
由于我没有责任的原因,这个服务不应该抛出错误。如果成功返回一个值,如果失败返回另一个值(这里抽象为bool用于演示)。
事务流工作。
然而,该属性意味着任何不是未捕获异常的结果都将完成事务。那不是我想要的行为。我想自己控制交易的结果。当返回false时,我希望事务失败。
我已经尝试了各种方法:
比较明显的是:将
TransactionAutoComplete
设置为false
。这意味着我必须使用基于会话的服务。我不想。我不需要。我完全可以接受每个调用一个事务范围。但这是不允许的。("TransactionAutoComplete设置为false需要使用InstanceContextMode.PerSession.")DIY:设置
TransactionScopeRequired
为false
,使用自己的。这意味着流事务不再工作,我每次都创建一个新的本地事务。绝望的一个:试图获得WCF创建的事务并自己回滚它…这导致我的服务抛出异常,因为它试图自动完成一个早已消失的事务。
我没主意了。有人知道如何创建我自己的事务范围,使用流分布式事务,不是使用微软自动完成-正常返回模式吗?我希望在不抛出异常的情况下不完成交易
事务范围可以嵌套。如果没有完成任何作用域,整个事务将终止。所以:
using (new TransactionScope()); //Doom transaction
最好注释这一行。
你也可以尝试调用Transaction.Current
上的东西,但我没有经验。