2011-03-18 64 views

回答

7

是的,它的工作原理。我们通过WCF流​​动事务,调用流程事务COM +组件,并手动将事务从.NET 2.0 asmx Web服务传递给WCF服务。

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

UPDATE

我们不使用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(); 
    } 
} 
+0

请告知更多关于将事务传递给另一个AppDomain的过程?你是否通过调用currentTransaction.DependentClone来创建克隆并传递它或只传递当前事务? – SiberianGuy 2011-03-18 05:18:36

+0

那么承诺这样的交易呢?我想我可以只从最初的AppDomain提交它? – SiberianGuy 2011-03-18 05:56:30

+0

@ldsa:当你通过appdomain传递一个事务时,你将处理一个分布式事务。要完成交易,所有参与者必须投票才能提交。例如appdomain1和appdomain2都必须提交。 – 2011-03-18 06:10:21

0

我发现这种风格的解决问题。就我而言,我正在做父母和多个孩子的工作。为了使它起作用,我只能在父项中使用TransactionScope。我自己的问题/答案在Using transactions across processes