TransactionScope для доменов приложений и процессов - PullRequest
5 голосов
/ 18 марта 2011

Реально ли использовать System.Transactions (прежде всего TransactionScope) в разных доменах приложений и процессах?

DependentTransaction работает только внутри одного домена приложений.

Ответы [ 2 ]

8 голосов
/ 18 марта 2011

Да, это работает. Мы проводим транзакции через 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();
    }
}
0 голосов
/ 28 ноября 2012

Я обнаружил проблемы с этим стилем решения. В моем случае я делал работу с родителями и несколькими детьми. Чтобы заставить его работать, мне пришлось использовать TransactionScope только в родительском. Мой собственный вопрос / ответ на Использование транзакций между процессами .

...