Управление версиями рабочего процесса WF4 с помощью WorkflowServiceHost

StackOverflow https://stackoverflow.com/questions/2433670

Вопрос

Относится к этот вопрос.

Я понимаю, как реализовать управление версиями рабочих процессов с помощью WorkflowApplication.Если вы сохраните исходное определение XAML для более старых версий вашего рабочего процесса, вы можете загрузить их, используя правильный WorkflowApplication конструктор.

Как вы могли бы гарантировать, что WorkflowServiceHost использует правильное определение рабочего процесса, если вы хотите разместить свои рабочие процессы в IIS?

Eсть WorkflowServiceHost конструктор, который можно использовать для загрузки определения рабочего процесса, но при размещении внутри IIS через файл XAMLX вы не вызываете WorkflowServiceHost самостоятельно, это каким-то образом обрабатывается IIS.Итак, как мне гарантировать, что правильное определение рабочего процесса загружено для правильной версии моего рабочего процесса?

Это было полезно?

Решение

Подход с использованием WorkflowServiceHost не сильно отличается от подхода с использованием WorkflowApplication.Основы хранения различных версий XAML(X) по-прежнему актуальны.Таким образом, в случае с WorkflowServiceHost вам необходимо создать несколько WorkflowServiceHost, каждый из которых будет содержать другую версию вашего XAMLX.Каждый со своей конечной точкой.Таким образом, по сути, конечная точка en обращается как к службе рабочего процесса, так и к ее версии.

Итак, как передать сообщения от клиента на правильный WorkflowServiceHost?Здесь вам поможет служба маршрутизации WCF.Вместо того, чтобы клиент напрямую связывался с вашим WorkflowServiceHost, они используют промежуточную службу маршрутизации WCF.Это, в свою очередь, проверяет сообщения и направляет их на WorkflowServiceHost, на котором размещен соответствующий файл XAMLX.Так откуда оно знает.Есть несколько способов сделать это.Например, выполнение поиска в базе данных с использованием идентификатора корреляции сообщений, при этом запросы на новые рабочие процессы всегда обращаются к последней версии.Самый простой способ — заставить службу рабочих процессов возвращать номер версии как часть первоначального запроса и сделать его обязательной частью каждого последующего запроса.Таким образом, служба маршрутизации WCF может выполнять всю свою работу, отправляя только данные сообщения.

Примером этого может быть:

  1. Клиент отправляет сообщение о запуске нового рабочего процесса с идентификатором заказа 7 и получает обратно версию 3.Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации перенаправляет его на httl://localhost/MyWorkflow.v3.xamlx, который является последней версией.
  2. Следующее сообщение, которое оно отправляет в рабочий процесс, содержит как идентификатор заказа, так и версию 3.Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации перенаправляет его на httl://localhost/MyWorkflow.v3.xamlx, который является указанной версией.
  3. Клиентское приложение хочет отправить сообщение в старый рабочий процесс.Он использует идентификатор заказа 2 и версию 1 (ответ был получен при запуске этого рабочего процесса).Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации перенаправляет его на httl://localhost/MyWorkflow.v1.xamlx, который соответствует указанной версии.

Проверять эти скринкасты для получения дополнительной информации о службе маршрутизации WCF.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top