2013-07-26 4 views
4

В настоящее время мы пытаемся реализовать функциональность рабочего процесса в нашем продукте (.NET 4.5). Для этого рассмотрим использование Microsoft Workflow Foundation 4.5. Однако на этом раннем этапе мы столкнулись с технической проблемой чего-то, что кажется очень выполнимым.Комбинация Workflow/Workflow Service? Как использовать операцию приема на «нормальном» рабочем процессе?

Проще говоря, это то, что мы хотим достичь в нашей установке клиент/сервер:

  • на основе конкретного события сервер запускает рабочий процесс
  • Рабочий процесс выполняет некоторые действия до тех пор, пока не приходит к деятельности что требует взаимодействия с человеком. Затем он должен ждать сообщения от клиента.
  • Один клиент (есть несколько клиентов) становится владельцем и поэтому должен отправлять свой уникальный идентификатор или адрес в рабочий процесс
  • Рабочий процесс отправляет сообщение этому клиенту, указывающее на то, что он требует продолжения информации (например, параметры электронной почты как получатель, субъект и тело)
  • После нескольких минут (может быть от нескольких минут до нескольких часов) клиент отправляет информацию в рабочий процесс, чтобы продолжить (например, отправить сообщение электронной почты)
  • Если требуется другое взаимодействие с человеком, сервер снова отправляет запрос клиенту, чтобы он знал, что он должен запросить у пользователя информацию, а затем клиент снова отправит сообщение в рабочий процесс (например, ab ove)

Для того, что я понял, «нормальный» рабочий процесс не имеет конечной точки для приема сообщений. С другой стороны, служба рабочего процесса, но с услугами WF экземпляры рабочего процесса будут создаваться на основе входящих запросов, а не контролировать сервер создания рабочих процессов (правильно?).

В этот момент мне кажется, что нам нужна комбинация рабочего процесса и службы рабочего процесса.

Я боролся с этим какое-то время и искал высоко и низко, но не могу найти полезную информацию об этом.

Я думаю, что у нас есть два варианта:

  1. Workflow услуги; Если мы будем использовать службы рабочего процесса, у нас может быть активность приема в начале рабочего процесса, который запускает рабочий процесс. Однако, как клиенты могут общаться с этим конкретным рабочим процессом? Служба рабочего потока имеет один конкретный URL-адрес.

  2. Рабочие процессы; Обычный рабочий процесс, размещаемый серверным приложением, кажется наиболее естественным путем выбора. Однако тогда нам нужен способ отправить данные на него. Итак, возможно ли обновить нормальный рабочий процесс, чтобы можно было использовать операцию приема? И если да, то как? И как сообщения заканчиваются в правильном экземпляре рабочего процесса?

Мои вопросы: ли кто-нибудь есть некоторые полезные указания или информацию о том, как решить данную проблему? Есть ли интересные альтернативы (не используя WF?), Чтобы выполнить это? У кого-нибудь есть документация о том, как сообщения WCF направляются на правильный экземпляр рабочего процесса в WF?

PS: У нас есть служба WCF, доступная на клиенте. Рабочий процесс может обмениваться данными.Для коротких запросов на запуск это не проблема, но дело в том, что запросы могут занять много времени, прежде чем клиент «ответит» на них. Кроме того, клиент может запрашивать информацию только в том случае, если пользователь нажимает кнопку «Продолжить» (пользователи не должны получать всплывающее окно только в середине чего-то, потому что сервер хочет получить информацию)

+0

Просто наткнулся на комментарий Мориса со ссылкой на: http://msmvps.com/blogs/theproblemsolver/archive/2010/04/28/workflow-receive-activity-and-message-correlation.aspx Это кажется интересно. –

ответ

1

Да, Workflow Service с AppFabric идеально подходит и должен просто работать из коробки, если я правильно понимаю вашу проблему.

На ваш вопрос «Однако как клиенты могут общаться с этим конкретным рабочим процессом?» ответ - это корреляция, и вы можете легко установить это в первом Получении. Вы просто добавляете переменную CorrelationHandle и устанавливаете CorrelatesOn для получения входящего параметра (ownerid?) И CorrelatesWith для этого дескриптора. Сделайте то же самое для всех других получателей, и входящие сообщения всегда будут перенаправлены в нужный экземпляр.

AppFabric поможет в том, что ваш WF-сервис будет выгружен из памяти и сохранен, если он слишком долгое время простаивает, просыпается, когда приходит новый прием и т. Д. Это также поможет в том, что вы можете установить автозапуск в своем приложении IIS бассейн. WAS активирует вашу службу рабочего потока по входящему запросу.

Если вам нужна дополнительная информация, просто дайте мне знать.