在不同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