2011-03-18 75 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