Как разрешить службу преобразования с помощью BRE, которая возникает после оркестрации в маршруте?

StackOverflow https://stackoverflow.com/questions/2999139

Вопрос

Пытаясь реализовать простую интеграцию узоры с Biztalk ESB Toolkit 2.0 я столкнулся с проблемой при попытке разрешить службу маршрута преобразования, которая возникает после оркестрации.

Я использую BRE Resolver для выполнения правил, которым необходимо проверять свойство «Тип контекстного сообщения», чтобы определить подходящую карту для использования.Однако как только сообщение достигает шага маршрута, связанного со службой преобразования, карта не может быть выполнена.

В результате тщательного исследования выяснилось, что тип сообщения не предоставляется объекту «Разрешение», который используется внутри преобразователя BRE.Действительно, поскольку сообщение, покидающее предыдущую оркестровку, набирается System.Xml.XmlDocument, тип сообщения «понижается» из контекста.

Отслеживая выполнение механизма правил, я могу заметить, что тип сообщения действительно потерянный при достижении резольвера BRE.Тип сообщения пуст, тогда как строго типизированный документ Microsoft.XLANGs.BaseTypes.Any.

Используемый мной сервис Orchestration взят прямо из примеров, поставляемых с ESB Toolkit 2.0.

Есть ли способ выполнить контекстное разрешение BRE? после оркестровка в маршруте?

Это было полезно?

Решение

Отвечая на свой же вопрос...Короче говоря, ключевым моментом является изменение контекста исходного сообщения и продвижение свойства контекста MessageType.В следующих абзацах я воспроизвожу предстоящую публикацию о мой блог:

Маршрутная служба оркестровки 101

После того, как я изо всех сил пытался заставить эту работу работать и пробовал разные решения, мне наконец удалось следовать набору простых правил.В этом посте я хотел бы обрисовать, что представляет собой корректная оркестровка, совместимая с ESB Toolkit 2.0, которую можно использовать в качестве службы маршрута и при этом использовать преимущества преобразователя Business Rules Engine для динамического преобразования на основе типа контекста сообщения. .

Контекстная подписка на маршрутную услугу

Во-первых, оркестровка, предназначенная для использования в качестве службы маршрута, должна иметь логический порт с прямой связью, связанный с формой приема, которая определяет подписку, поддерживающую ESB, например:

Microsoft.Practices.ESB.Itinerary.Schemas.ServiceName == "MyCustomItineraryService" And
Microsoft.Practices.ESB.Itinerary.Schemas.ServiceState == "Pending" And
Microsoft.Practices.ESB.Itinerary.Schemas.ServiceType == "Orchestration"

В документации об этом не упоминается, но это ясно дает понять, что операции порта с прямой привязкой должны быть сопоставлены с сообщениями типа System.Xml.XmlDocument.Действительно, если это не так, оркестровка не будет выполнена, и Ошибка маршрутизации сообщение об ошибке будет зарегистрировано в Окно сообщения.

Это, кстати, означает, что сам тип сообщения вообще не учитывается.И это во многом объясняет, почему после выполнения оркестрации преобразователь Business Rules Engine не может определить правильное преобразование.

Как добраться до маршрута

Следующий код в форме выражения в начале оркестрации помогает получить текущий шаг маршрута:

// Retrieve the current itinerary step.
itinerary.Itinerary = Microsoft.Practices.ESB.Itinerary.ItineraryOMFactory.Create(InboundMessage);
itineraryStep.ItineraryStep = itinerary.Itinerary.GetItineraryStep(InboundMessage);

Сохранение контекста исходного сообщения

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

OutboundMessage(*) = SourceMessage(*)

Обратите внимание: в предложении выше я написал «по большей части».Фактически, как мы увидим через минуту, тип результирующего сообщения должен присутствовать в контексте в конце оркестровки.Скорее всего, это будет другой тип чем исходное входящее сообщение.И поскольку назначение файла только для чтения BTS.MessageType собственности невозможно, иногда этого может быть довольно сложно добиться.

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

Продвижение маршрута

В конце оркестровки нельзя забывать следующий очень простой код:

itinerary.Itinerary.Advance(OutboundMessage, itineraryStep.ItineraryStep);

Продвижение свойств контекста

А документация не совсем ясно поясняет, какие именно шаги необходимо выполнить, или даже нужно ли повышать свойства с помощью такой оркестровки, но, глядя на примеры, предоставленные в виде исходного кода, можно обнаружить, что в механизме разрешения принимают участие следующие свойства:

Продвижение свойств http://public.blu.livefilestore.com/y1pLURN1zH2vdRuLcF5yyAiHZQQ9rkdlrqG-QH01Nn8hEY5zH1W9TjjtNc0Z9421eFC2gUVG-srs2-NdcliI3XD1w/orchestration_service_promoting_properties.png?psi д=1

Однако в сценарии, изложенном в этом посте, этого явно недостаточно.

Чтобы контекстно-ориентированные правила работали после оркестрации, необходимо также повысить свойство BTS.MessageType.Этого можно легко добиться, инициализируя корреляцию формы отправки в конце оркестровки.

Корреляция типов сообщений http://public.blu.livefilestore.com/y1pQb-dkmbNBcur7CwdyudiIE9EMKGnZ0LoGuFpfDLseAWsiUz9C1EC1ZR5pn0gI4tgr3syEN2y-cfPB9EgEzlgtA/message_type_correlation.png?psid=1

И это работает!

В моей первоначальной попытке не хватало продвижения типа сообщения в контексте результирующего сообщения.Как только это было выявлено, маршрут сработал как по маслу!

Журнал срабатывания правил http://public.blu.livefilestore.com/y1pGVViJM7SFbopcnYODHkqGUbkgS1RQR8a7ASVsNVDu8Krdhb_Vyj4PugbMPSFcfMEZ1P_3a7It0QQpXdF_dnvDg/rule_firing_log.png?psid=1

Хотя решение может показаться очевидным постфактум, оно наверняка помогло бы мне, если бы я знал это раньше.Я надеюсь, что этот пост поможет тем, кто столкнулся с той же проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top