5

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

DependentTransaction仅在一个 AppDomain 内起作用。

4

2 回答 2

8

是的,它有效。我们通过 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();
    }
}
于 2011-03-18T05:07:37.267 回答
0

我发现这种解决方案存在问题。就我而言,我在父母和多个孩子身上工作。为了让它工作,我必须只在父级中使用 TransactionScope。我自己的问题/答案在Using transactions across processes

于 2012-11-27T22:25:08.297 回答