因为要做一个拆分循环的Demo,很自然的想到了使用Envelop,但是有些信封头上的信息想要追加到每条消息里,好像比较麻烦,没办法,使用最笨的方法xpath解析循环body,循环构建单条消息,这样倒是可以随心所欲追加任何信息,但是总感觉用xpath解析效率不高,如图1.
想到BizTalk 2006提供了Use Expression Execute Pipeline in Orchestration的供能.照着例子做了一遍,有一个问题总是过不去,总是说我消息不匹配,没有订阅者,死活没有进流程.后来仔细看了文档,说是要求把Receive Document设为XmlDocument类型,照着改了(好在我使用了Multi-Part Message,改起来很方便),居然进流程了,但是还是报错,还是说消息类型不匹配.忘记看了哪篇文章说不要在ReceivePipeline里指定 Envelop Schema和Document Schema,照做了,居然通过了,这就郁闷了.
不死心,加了检查代码:
System.Diagnostics.Trace.WriteLine(DischargeMessage(BTS.MessageType));
居然结果不是Envelop的消息类型,而是拆分完的消息类型,这就纳闷了,把原来接收的消息从XmlDocument改成Body消息,没有问题,这个我就糊涂了,难到说进来之前已经拆分掉了?如图2,我本来以为可以接收整个消息,取出消息头,拆分消息体,然后重新构建消息体,追加消息头上的关键信息,比如说主键之类的,但是现在 Execute Receive Pipeline 和信封执行没多大区别.
图1 图2
图1:XPath循环消息构建
图2:Execute Receive Pipeline