Параллельные фигуры в BizTalk Server
Я использую параллельные фигуры в оркестровке BizTalk. Есть четыре параллельных ветви в форме, и в каждой ветви я использую форму области действия (Тип транзакции = Нет) с последующим блоком перехвата, и логика выполнения помещается в форму области.
Эта параллельная форма также содержится в области (тип транзакции = нет) в оркестровке с соответствующим блоком перехвата.
Теперь, что такое предполагаемое поведение, если выполнение в одной из веток не удается? По моему мнению, если выполнение одной ветви терпит неудачу, выполнение другой ветви должно было иметь место.
Но в моем оркестровке, если выполнение одной ветви не удается, выполнение другой ветви даже не запускается. Похоже, что другая ветвь запускается после успешного выполнения предыдущего кода ветвления.
Пожалуйста, скажите мне, что может быть возможным источником этого поведения?
2 ответа
Согласно MSDN, форма Parallel будет работать независимо от всех ветвей. См. MSDN: http://msdn.microsoft.com/en-us/library/ee253584(v=bts.10).aspx
Однако это с точки зрения бизнес-процессов, а не с технической точки зрения. Если одна из ваших ветвей выходит из строя, вполне возможно, что другие ветви не будут выполнены. Насколько я знаю, вы не имеете никакого контроля над порядком исполнения (хотя не уверен насчет этого).
См. Этот небольшой пост в блоге для получения дополнительной информации: http://blogs.msdn.com/b/pkelcey/archive/2006/08/22/705171.aspx
Шаблон агрегатора может быть хорошей идеей, в зависимости от вашей конкретной ситуации. Это даст вам полный контроль над ситуацией.
В основном, если одна из ветвей терпит неудачу, тогда все ветки терпят неудачу. Ключевой момент для запоминания:
All branches come together at the end of the Parallel Actions shape, and processing does not continue until all have completed.
Таким образом, если одна из ветвей потерпит неудачу, они никогда не сойдутся. Если в одну ветку выдается исключение, блок catch перехватит его, а все остальные ветви перестанут обрабатывать все входящие сообщения. Насколько я понимаю, параллельные ветви в основном используются в корреляции сообщений для ситуаций, когда вам нужно ждать более одного сообщения, чтобы иметь возможность продолжить. Порядок выполнения ветки определяется порядком полученных сообщений, ожидаемых каждой веткой.