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


Область подавления транзакции

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

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

Ee656552.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\SuppressTransactionScope

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

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

Сценарий состоит из трех частей. Сначала TransactionScope создает транзакцию среды выполнения, которая становится внешней. Это подтверждается пользовательским действием, выводящим местные и распределенные идентификаторы транзакции. Затем транзакция переходит к удаленной службе, после чего начинается вторая часть. В ходе второй части рабочий процесс входит в область SuppressTransactionScope и вновь повторяет процесс вывода идентификаторов транзакций и потоковой передачи транзакций. Однако пользовательское действие не находит внешнюю транзакцию, и сообщение, передаваемое службе, не содержит транзакции. В результате служба создает транзакцию, а это значит, что распределенные идентификаторы, выводимые на клиенте и в службе, не совпадают между собой. Последняя часть выполняется, когда закрывается SuppressTransactionScope, а среда исполнения вновь становится внешней, о чем свидетельствует другое сообщение, отправленное в службу с распределенным идентификатором, совпадающим с идентификатором первого сообщения.

Само действие является производным от NativeActivity, поскольку оно должно запланировать дочернее действие и добавить свойство выполнения. У SuppressTransactionScope есть Variable типа RuntimeTransactionHandle, которое следует использовать вместо поля типа RuntimeTransactionHandle, поскольку дескриптор необходимо инициировать. Идентификатор Variable<RuntimeTransactionHandle> добавляется к метаданным действия как переменная реализации, поскольку он используется только для внутренних задач.

При совершении действия сперва проверяется, был ли указан текст, и, если он был указан, то задается свойство SuppressTransaction для RuntimeTransactionHandle. После задания свойства оно добавляется к свойствам исполнения и становится внешним. Это значит, что любое дочернее по отношению к SuppressTransactionScope действие может видеть свойство, и, следовательно, обеспечивает подавление транзакции среды подавления и приводит к формированию исключения во вложенной области TransactionScope. После добавления дескриптора к свойствам исполнения планируется запуск текста.

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

  1. Откройте решение SuppressTransactionScope.sln в Visual Studio 2010.

  2. Чтобы построить решение, нажмите клавишу F6 или выберите команду Построить решение в меню Построение.

  3. После успешного построения щелкните решение правой кнопкой мыши и выберите команду Назначить запускаемые проекты. В диалоговом окне выберите вариант Несколько запускаемых проектов и убедитесь, что для обоих проектов задано действие Запустить.

  4. Нажмите клавишу F5 или выберите команду Начать отладку в меню Отладка. Также можно нажать клавиши CTRL+F5 или выбрать команду Запуск без отладки в меню Отладка, чтобы запустить выполнение без отладки.

    Ee656552.note(ru-ru,VS.100).gifПримечание
    Перед запуском клиента необходимо запустить сервер. Данные, выводимые в окне консоли, в котором размещена служба, указывают время начала работы службы.

Ee656552.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\SuppressTransactionScope