跨AppDomains和进程的TransactionScope

时间:2011-03-18 04:50:51

标签: .net database ado.net transactionscope system.transactions

在不同的AppDomain和进程中使用System.Transactions(主要是TransactionScope)是真的吗?

DependentTransaction仅适用于一个AppDomain。

2 个答案:

答案 0 :(得分:7)

是的,它有效。我们通过WCF流​​动事务,调用流程外事务COM +组件,并手动将事务从.NET 2.0 asmx Web服务传递到WCF服务。

现在,这并不是说设置不挑剔。我认为大多数问题都是在所有服务器上正确设置MSDTC。

<强>更新

我们不使用DependentClone。我们使用GetTransactionFromTransmitterPropagationToken将事务作为字节数组传递。与Propagating a Transaction Across AppDomains的第二个示例非常相似。

举个例子:

客户端:

public void CallOutOfProcessAndPassTransaction
{
    Client client = new Client();

    client.DoSomethingTransactional(
        System.Transactions.TransactionInterop.GetTransmitterPropagationToken(
            System.Transactions.Transaction.Current)
    );
}

服务:

public void DoSomethingTransactional(byte[] tx)
{
    using (TransactionScope ts = new TransactionScope(
               TransactionInterop.GetTransactionFromTransmitterPropagationToken(tx)))
    {
        // Do Something

        // vote to commit the transaction if the caller also agrees
        ts.Complete();
    }
}

答案 1 :(得分:0)

我发现这种解决方案存在问题。在我的情况下,我在父母和多个孩子的工作。为了使它工作,我不得不在父母中使用TransactionScope。我自己的问题/答案是Using transactions across processes