Транзакционные очереди
Данный раздел относится к версии Windows Workflow Foundation 4.
Этот образец показывает, как объединить очереди и транзакции в Windows Workflow Foundation (WF), чтобы создать надежные и масштабируемые службы. Область TransactionScope используется в рабочем потоке клиента для отправки сообщения в очередь в рамках транзакции с использованием NetMsmqBinding. Область TransactedReceiveScope используется на сервере для получения сообщений из очереди и обновления состояния рабочего процесса в рамках той же транзакции.
Демонстрации
Объекты TransactionScope, TransactedReceiveScope, NetMsmqBinding, Receive, а также корреляция на основе содержимого.
Обсуждение
Для демонстрации функциональности, рассматриваемой в этом образце, создается служба рабочего процесса RewardsPoints
, которая следит за точками, приобретенными и используемыми для данной учетной записи.. Клиент использует WorkflowInvoker для моделирования вывода различных запросов в очередь. Для вывода сообщения в очередь в рамках транзакции действие Send может быть помещено в тело Body области TransactionScope. В этом образце сначала запускается клиент, а затем сервер, что позволяет показать, как обеспечить развязку клиентских и серверных приложений с помощью сообщений, поставленных в очередь.
После завершения работы клиента служба настраивается и размещается. Как только служба открывается, она начинает обработку сообщений, которые были уже помещены в очередь. Получение и обработка каждого сообщения происходит в рамках одной и той же серверной транзакции. В этом образце первым полученным сообщением является запрос CreateAccount
, который создает экземпляр и инициализирует корреляцию содержимого на основе имени учетной записи, переданной как часть сообщения запроса. Для моделирования разновидности службы, которая могла бы встретиться в реальном мире, ниже приведены два действия TransactedReceiveScope, которые обрабатывают сообщения AddPoints
и UsePoints
, помещенные в параллельные ветви цикла while, чтобы с их помощью можно было неоднократно обрабатывать указанные сообщения в любом порядке.
Каждый из объектов TransactionScope и TransactedReceiveScope имеет неявную точку сохраняемости в конце своей области, поэтому использование этих действий в WF в сочетании с очередями представляет собой надежный способ перемещения рабочего процесса из одного согласованного состояния в следующее с гарантией того, что сообщения никогда не потеряются.
Настройка, построение и выполнение образца
Установите и настройте MSMQ. Подробные сведения см. в разделе Установка службы очередей сообщений.
Убедитесь в том, что MSDTC работает, выполнив следующую команду в командной строке: net start msdtc
Откомпилируйте проект и откройте исполняемый файл или откройте проект в Visual Studio 2010 и выберите параметр запуска в меню отладки. Сначала создается очередь, затем запускается клиент и выводит сообщения в очередь, и, наконец, запускается служба, и производится обработка сообщений. Чтобы выйти из программы, нажмите клавишу ВВОД.
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\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\TransactedQueues
|