Управление версиями рабочего процесса WF4 с использованием WorkflowServiceHost
Связанный с этим вопросом.
Я понимаю, как реализовать управление версиями рабочих процессов с помощью WorkflowApplication
, Если вы сохраните исходное определение XAML для более старых версий вашего рабочего процесса, вы можете загрузить их, используя правильные WorkflowApplication
конструктор.
Как вы могли бы гарантировать, что WorkflowServiceHost
использует правильное определение рабочего процесса, когда вы хотите разместить свои рабочие процессы в IIS?
E сть WorkflowServiceHost
конструктор, который можно использовать для загрузки определения рабочего процесса, но когда вы размещаете внутри IIS через файл XAMLX, вы не вызываете WorkflowServiceHost
самостоятельно, это как-то обрабатывается IIS. Итак, как мне убедиться, что правильное определение рабочего процесса загружено для правильной версии моего рабочего процесса?
1 ответ
Подход с использованием WorkflowServiceHost - это не совсем другая форма с использованием WorkflowApplication. Основы хранения различных версий XAML(X) по-прежнему применяются. Таким образом, в случае WorkflowServiceHost вам нужно создать несколько WorkflowServiceHost, каждый из которых будет иметь свою версию XAMLX. Каждый с другой конечной точкой. Таким образом, в основном конечная точка en обращается и к сервису рабочего процесса, и к его версии.
Так как же получить сообщения от клиента на правильный WorkflowServiceHost? Здесь служба маршрутизации WCF - ваш друг. Вместо того чтобы клиент напрямую связывался с WorkflowServiceHost, он использует промежуточную службу маршрутизации WCF. Это, в свою очередь, проверяет сообщения и направляет их в WorkflowServiceHost, на котором размещен соответствующий файл XAMLX. Так как это узнать. Есть несколько способов сделать это. Например, поиск в базе данных с использованием идентификатора корреляции сообщений с запросами на новые рабочие процессы, всегда идущие к последней версии. Самый простой способ - заставить службу рабочего процесса возвращать номер версии как часть первоначального запроса и сделать это обязательной частью каждого последующего запроса. Таким образом, служба маршрутизации WCF может выполнять всю свою работу только с отправкой данных сообщения.
Примером этого может быть:
- Клиент отправляет сообщение о запуске нового рабочего процесса, используя идентификатор заказа 7, и получает версию 3 обратно. Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации переадресует на httl://localhost/MyWorkflow.v3.xamlx, который является последней версией.
- Следующее сообщение, которое он отправляет в рабочий процесс, содержит как orderid, так и версию 3. Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации пересылает в httl://localhost/MyWorkflow.v3.xamlx, который является указанной версией.,
- Клиентское приложение хочет отправить сообщение в более старый рабочий процесс. Он использует orderid 2 и версию 1 (ответил, когда этот рабочий процесс был запущен). Клиентское приложение использует URL-адрес httl://localhost/MyWorkflow.xaml, а служба маршрутизации пересылает на httl://localhost/MyWorkflow.v1.xamlx, которая является заложенной версией.
Проверьте эти скринкасты для получения дополнительной информации о службе маршрутизации WCF.