У робочому процесі транзакція буде автоматично завершена в момент завершення самої зовнішньої транзакції TransactionScope або TransactedReceiveScope .Коли необроблене виняток поширюється через кордон області, здійснюється явне відкочування транзакціі.Однако можуть зустрічатися випадки, коли явний відкіт транзакції має сенс виконувати, не викликаючи ісключеніе.В цьому випадку можна використовувати для користувача дію відкату (як в цьому зразку), щоб явно перервати зовнішню транзакцію і видати додаткову причину виключення.
Дія RollbackActivity являє собою дію NativeActivity. оскільки воно вимагає доступу до властивостей виключення для отримання зовнішнього дескриптора RuntimeTransactionHandle .У методі Execute дію отримує дескриптор RuntimeTransactionHandle і перевіряє його значення. Значення null означає, що дія було використано без зовнішньої транзакції часу виполненія.Затем відбувається отримання транзакції з такою ж перевіркою значення null .Внешній дескриптор RuntimeTransactionHandle можна отримати, взагалі не запускаючи транзакцію часу виполненія.Затем відбувається переривання транзакції за допомогою виклику методу Rollback і вказівки або призначеного для користувача , або універсального виключення, який встановлює, що дана дія вчинила відкат транзакції.
Демонстраційний робочий процес складається з класу TransactionScope. тіло якого виводить на екран консолі стан транзакції до і після виконання RollbackActivity .Зверніть увагу, що TransactionScope буде виконуватися аж до завершення, навіть якщо був здійснений відкат транзакції, при цьому робочий процес не буде перериватися до завершення тіла запроса.Рабочій процес буде перерваний в тому випадку, якщо значення властивості AbortInstanceOnTransactionFailure прийме значення за замовчуванням true.
Використання цього зразка
Щоб побудувати рішення, натисніть CTRL + SHIFT + B.
Щоб запустити програму, натисніть клавіші CTRL + F5.