WF4: Как настроить рабочий процесс для получения нескольких сообщений

#.net-4.0 #workflow-foundation-4

#.net-4.0 #рабочий процесс-foundation-4

Вопрос:

Мне нужен рабочий процесс, который может получать несколько одинаковых сообщений из MSMQ.

Пример:

 Receive: CreateWorkflow (CanCreateInstance=True)
Do Something...
Parallel (CompletionCondition=ExitParallel)
    Parallel Branch 1
        Receive: Update (CanCreateInstance=False, Use correlation)
        Process...
    Parallel Branch 2
        Receive: Finish (CanCreateInstance=False, Use correlation)
        Set ExitParallel=True
  

Я хотел бы, чтобы мой рабочий процесс мог получать несколько сообщений об обновлении. Однако при этой настройке он может получить только 1. Согласно этому сообщению MSDN, это должно сработать, но у меня так и не получилось это сделать.

Есть ли решение поместить бесконечный цикл while в параллельную ветвь 1? Есть ли другой способ?

Ответ №1:

Чтобы получать несколько сообщений об обновлении, вам нужно будет поместить это получение в цикл. То, как вы настроили его прямо сейчас, обновление разрешено один раз, и параллель ожидает завершения только второй ветви с завершением.

Комментарии:

1. Помещение приема в цикл работает. Существует вероятность того, что другое сообщение «Обновить» приходит, когда рабочий процесс обрабатывает предыдущее сообщение «Обновить». В этом случае рабочий процесс не находится на приемнике. Сообщение будет потеряно? Или сообщение ожидает, пока рабочий процесс не вернется к получателю?

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