1

我目前正在开发一个需要拆分传入消息的 BizTalk 实现。到目前为止,我能找到的唯一示例使用信封模式,该模式将为传入消息的每个子节点创建一条消息。

然而,在我收到的信息中,这还不够。我需要拆分消息,以便具有相同标识符的所有子记录成为一条消息。

简化后,入站消息如下所示:

<Root>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
</Root>

然而,显然有更多的数据,而不仅仅是一个 ID。我想要的是将其拆分为相同的结构,但每个 ID 生成一条消息,因此结果如下所示:

消息 1

<Root>
    <Child>
        <ID>1</ID>
    </Child>
    <Child>
        <ID>1</ID>
    </Child>
</Root>

消息 2

<Root>
    <Child>
        <ID>2</ID>
    </Child>
    <Child>
        <ID>2</ID>
    </Child>
</Root>

除此之外,我不能确定 ID 是否会逐渐增加,但它们也可能会在消息中被打乱。ID也没有最小或最大出现;可能有一个,可能有50个。

所以我的问题如下:如何以最好的方式解决这个问题?我可以将信封用于这种“高级”分批程序吗?我是否需要创建自定义管道组件,或者还有其他秘密吗?;)

提前致谢!

4

3 回答 3

2

我认为这超出了信封可以为您做的事情。您可以在管道组件中执行此操作。

您必须创建所需的每条消息,然后将其添加到管道组件管理的队列中。然后通过管道组件实现的 IDisassemblerComponent 接口的“GetNext”方法提供对该队列的访问。可以在http://www.codeproject.com/KB/biztalk/btsunzipdisassembler/UnzipDisassembler_src.zip上的 CodeProject 上找到执行此类操作来处理 zip 文件内容的示例。只需将处理 zip 文件的代码替换为处理消息的代码即可

请记住,在处理您的消息与“DOM”时,建议使用流式传输。可以在http://www.microsoft.com/en-us/download/details.aspx?id=20375找到开发流式管道组件的示例。

于 2012-05-04T18:24:08.073 回答
0

您可能会查看message debatching。该链接中的编排建议可能是您正在寻找的。

于 2012-05-07T16:18:25.163 回答
0

我使用自定义 XSLT 和 [Muenchian 方法] 使用地图做了类似的事情:http: //www.jenitennison.com/xslt/grouping/muenchian.html

它本身并不分批,但您可以将其与包络模式一起使用,并通过环回端口重新提交消息或从编排执行接收管道以执行实际的分批。

于 2012-05-09T20:34:44.807 回答