在不同AppDomain和進程之間使用System.Transactions(主要是TransactionScope)是真的嗎?跨AppDomains和進程的TransactionScope
DependentTransaction只能在一個AppDomain內工作。
在不同AppDomain和進程之間使用System.Transactions(主要是TransactionScope)是真的嗎?跨AppDomains和進程的TransactionScope
DependentTransaction只能在一個AppDomain內工作。
是的,它的工作原理。我們通過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();
}
}
我發現這種風格的解決問題。就我而言,我正在做父母和多個孩子的工作。爲了使它起作用,我只能在父項中使用TransactionScope。我自己的問題/答案在Using transactions across processes。
請告知更多關於將事務傳遞給另一個AppDomain的過程?你是否通過調用currentTransaction.DependentClone來創建克隆並傳遞它或只傳遞當前事務? – SiberianGuy 2011-03-18 05:18:36
那麼承諾這樣的交易呢?我想我可以只從最初的AppDomain提交它? – SiberianGuy 2011-03-18 05:56:30
@ldsa:當你通過appdomain傳遞一個事務時,你將處理一個分佈式事務。要完成交易,所有參與者必須投票才能提交。例如appdomain1和appdomain2都必須提交。 – 2011-03-18 06:10:21