Поделиться через


Откат транзакции

Данный раздел относится к версии Windows Workflow Foundation 4.

Этот образец показывает, как создавать пользовательское действие NativeActivity, которое обращается к внешнему дескриптору RuntimeTransactionHandle для получения внешней транзакции и выполнения явного ее отката.

Подробные сведения об образце

В рабочем процессе транзакция будет автоматически завершена в момент завершения самой внешней транзакции TransactionScope или TransactedReceiveScope. Когда необработанное исключение распространяется через границу области, осуществляется явный откат транзакции. Однако могут встречаться случаи, когда явный откат транзакции имеет смысл выполнять, не вызывая исключение. В этом случае можно использовать пользовательское действие отката (как в этом образце), чтобы явным образом прервать внешнюю транзакцию и выдать дополнительную причину исключения.

Действие RollbackActivity представляет собой действие NativeActivity, поскольку оно требует доступа к свойствам исключения для получения внешнего дескриптора RuntimeTransactionHandle. В методе Execute действие получает дескриптор RuntimeTransactionHandle и проверяет его значение. Значение null означает, что действие было использовано без внешней транзакции времени выполнения. Затем происходит получение транзакции с такой же проверкой значения null. Внешний дескриптор RuntimeTransactionHandle можно получить, вообще не запуская транзакцию времени выполнения. Затем происходит прерывание транзакции посредством вызова метода Rollback и указания либо пользовательского, либо универсального исключения, устанавливающего, что данное действие совершило откат транзакции.

Демонстрационный рабочий процесс состоит из класса TransactionScope, тело которого выводит на экран консоли состояние транзакции до и после выполнения RollbackActivity. Обратите внимание, что TransactionScope будет выполняться вплоть до завершения, даже если был совершен откат транзакции, при этом рабочий процесс не будет прерываться до завершения тела запроса. Рабочий процесс будет прерван в том случае, если значение свойства AbortInstanceOnTransactionFailure примет значение по умолчанию true.

Использование этого образца

  1. Загрузите решение TransactionRollback.sln в среде Visual Studio 2010.

  2. Нажмите клавишу F6 для построения решения.

  3. Чтобы запустить приложение, нажмите клавиши CTRL+F5.

Ee656553.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WF\Scenario\Transactions\TransactionRollback

См. также

Основные понятия

Транзакции рабочих процессов