Да, это работает. Мы проводим транзакции через WCF, вызываем компоненты транзакционных компонентов COM + и вручную передаем транзакции из веб-службы .NET 2.0 asmx в службу WCF.
Теперь это не означает, что установка не привередлива. Я думаю, что большинство проблем было связано с правильной настройкой MSDTC на всех серверах.
UPDATE
Мы не используем DependentClone
. Мы передаем транзакцию как байтовый массив, используя GetTransactionFromTransmitterPropagationToken
. Очень похоже на второй пример Распространение транзакции между доменами приложений .
Как пример:
Клиент:
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();
}
}