【发布时间】:2014-09-19 16:16:15
【问题描述】:
我有一个应该使用分布式事务的服务。
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public bool ServiceMethod(int parameterPlaceHolder)
{
return SomeOperationResult();
}
出于我不负责任的原因,此服务绝不应引发错误。成功时返回一个值,失败时返回另一个值(此处抽象为 bool 用于演示目的)。
事务流动有效。
但是,该属性意味着任何不是未捕获异常的结果都将完成事务。这不是我想要的行为。我想自己控制交易的结果。返回 false 时,我希望交易失败。
我尝试了各种方法:
显而易见的一个:将
TransactionAutoComplete设置为false。这意味着我必须使用基于会话的服务。我不想。我不需要。每次调用一个事务范围我都很好。但这是不允许的。 (“TransactionAutoComplete 设置为 false 需要使用 InstanceContextMode.PerSession。”)DIY 一个:将
TransactionScopeRequired设置为false并使用我自己的。这意味着流动的交易不再起作用,我每次都创建一个新的本地交易。绝望的一个:试图获取 WCF 创建的事务并将其回滚...这导致我的服务抛出异常,因为它试图自动完成一个早已不复存在的事务。
我没有想法。有谁知道如何使用流式分布式事务创建我自己的事务范围,不使用 Microsoft AutoComplete-On-Normal-Return 模式?我不想在不抛出异常的情况下完成交易。
【问题讨论】:
标签: c# wcf transactions distributed-transactions msdtc