Корреляция в BizTalk

#biztalk

#biztalk

Вопрос:

У меня есть 2 оркестровки в моем проекте и 2 схемы (первая предназначена для запроса, вторая — для ответа). Orchestration 1 имеет Receive форму (Активация = истина). Он получает запрос и затем направляет его на Orchestration 2 . Последний создает запрос к веб-службе, которая отвечает ответом, ждет 2 минуты, а затем отправляет новый запрос в мою службу BizTalk. Оба проекта используют одни и те же схемы, схемы a Request и a Response .

Orchestration 2 использует набор корреляций, который инициализируется в Send форме, которая отправляет запрос веб-службе. Кроме того, Orchestration 2 имеет Receive форму, ожидающую сообщения с корреляцией, установленной ранее в Send форме.

Вот диаграмма последовательности: введите описание изображения здесь

И есть Orchestration 2 : введите описание изображения здесь

Send_1 и Receive_2 формы имеют настроенные свойства корреляции.

Проблема в том, что когда веб-сервис отправляет request2 (см. Диаграмму выше) в мою службу biztalk, он выдает сообщение об ошибке: «В сообщении обнаружено несколько подписок на ответы на запросы. Сообщение может быть перенаправлено только на одну подписку на запрос ответа «.Как это может быть, если я установил корреляцию? Я ожидал, что request2 будет перенаправлен на Orchestration 2 , потому что у него есть приемник с корреляцией.

Ответ №1:

Сообщение об ошибке правильное.

Когда запрос отправляется из веб-сервиса, он направляется в форму приема активации Orchestration2.

Но поскольку корреляция действует, это создает дополнительную подписку, поэтому ожидается, что запрос также будет перенаправлен на третью форму приема в Orchestration2.

Если вы не можете различить схемы запросов, вы должны использовать дополнительное условие для активации Orchestration2. Вы можете, например, фильтровать запрос, поступающий от Orchestration1, с помощью дополнительных фильтров, основанных на свойствах контекста.

Вы заметите, что один запрос поступает от адаптера WCF или SOAP, а первый — нет.

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

1. Да, это сработало, спасибо! Я настроил выражение фильтра в форме приема оркестровки 1, и поэтому у меня все получилось.