TransactionScopeAsyncFlowOption不从WCF客户端流向服务

时间:2018-05-05 15:57:57

标签: wcf asynchronous transactionscope distributed-transactions

我的WCF服务方法需要在从客户端流向服务的事务中执行并发任务。为了使事务范围能够流经线程,我在发送对服务的调用之前,在事务范围类的构造函数中启用了TransactionScopeAsyncFlowOption。

using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    //service call here. Async flow option has no effect on service side.
}

事务从客户端流向服务但它无法流向子任务。但是,如果我在服务中创建新的事务范围并在其中启用其异步流,则事务将流向子任务。所以我的问题是,为什么TransactionScopeAsyncFlow选项对服务端的事务没有影响?它不应该采用客户端事务范围设置,因此不需要在服务中创建新的事务范围只是为了启用其异步流吗?

1 个答案:

答案 0 :(得分:0)

我也发现了类似的问题here。实际发生的是,WCF在超过第一个等待阈值时几乎失去了所有上下文,我们应该明确选择将任何环境上下文(如环境事务)流向后续的异步调用。 this一书中提到了一些解决方法。如果您需要更多细节,请查看它们。我将在服务操作中的异步调用之前创建新范围。