试图实施简单集成 图案 使用BizTalk ESB Toolkit 2.0,我面临一个问题,试图解决编排后发生的转换行程服务。

我正在使用BRE解析器执行需要检查上下文消息类型属性以确定要使用的适当地图的规则。但是,一旦消息达到与转换服务相关联的行程中的步骤,地图将无法执行。

从仔细的调查中,似乎没有将消息类型提供给BRE分辨率内部使用的“分辨率”对象。确实,由于离开前面的编排的消息已输入 System.Xml.XmlDocument, ,从上下文中“降级”消息的类型。

通过跟踪规则引擎执行,我可以观察到消息的类型确实是 丢失的 到达BRE解析器时。消息的类型是空的 Microsoft.XLANGs.BaseTypes.Any.

我使用的编排服务是直接从带有ESB Toolkit 2.0发货的样品中获取的。

有没有办法执行基于上下文的BRE解决 行程编排?

有帮助吗?

解决方案

回答我自己的问题...简而言之,关键是要预言原始消息的上下文并宣传MessageType上下文属性。在以下段落中,我复制了即将发表的帖子 我的博客:

管弦乐行程服务101

在努力完成这项工作并尝试不同的解决方案之后,我终于成功地遵循了一组简单的规则。在这篇文章中,我想概述哪些构成行为良好的ESB工具包2.0友好型编排,该编排可用作行程服务,并且仍然利用了基于消息的上下文类型的动态转换的业务规则引擎解析器。

行程服务的上下文订阅

首先,一个旨在用作行程服务的编排需要具有直接结合的逻辑端口,与接收形状相关联,该端口定义了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的消息。确实,如果不是这样,编排将无法执行,并且 路由故障 错误消息将注册到 消息框.

顺便说一句,这意味着 消息类型 根本不考虑。这在很大程度上解释了为什么在执行编排后,业务规则引擎解析器无法确定正确的转换。

进入行程

在编排开头的表达形状的以下代码有助于检索当前的行程步骤:

// 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);

促进上下文属性

文档 尚未明确说明必须遵循哪些确切步骤,即使需要从这样的编排中提升属性,但是将提供的样本视为源代码,人们可以发现以下属性参与了分辨率机制:

Promoting Properties http://public.blu.livefilestore.com/y1pLURN1zH2vdRuLcF5yyAiHZQQ9rkdlrqG-QH01Nn8hEY5zH1W9TjjtNc0Z9421eFC2gUVG-srs2-NdcliI3XD1w/orchestration_service_promoting_properties.png?psid=1

但是,在这篇文章中概述的情况下,这肯定还不够。

为了使基于上下文的规则在编排后运行,也需要推广BTS.MessageType属性。通过在编排末尾的发送形状上初始化相关性,可以轻松实现这一点。

Message Type Correlation http://public.blu.livefilestore.com/y1pQb-dkmbNBcur7CwdyudiIE9EMKGnZ0LoGuFpfDLseAWsiUz9C1EC1ZR5pn0gI4tgr3syEN2y-cfPB9EgEzlgtA/message_type_correlation.png?psid=1

它有效!

在结果消息的上下文中宣传消息类型是我最初尝试中缺少的。一旦确定了这一点,行程就像魅力一样!

Rule Firing Log http://public.blu.livefilestore.com/y1pGVViJM7SFbopcnYODHkqGUbkgS1RQR8a7ASVsNVDu8Krdhb_Vyj4PugbMPSFcfMEZ1P_3a7It0QQpXdF_dnvDg/rule_firing_log.png?psid=1

即使事实发生后,解决方案似乎很明显,但如果我早些时候知道这一点,它肯定会帮助我。我希望这篇文章能帮助那些遇到同样问题的人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top