BizTalk 信封架构和分批处理的说明

Explanation of BizTalk envelope schemas and debatching

我目前正在自学 BizTalk 作为新角色的一部分,并掌握了开发业务流程和配置管道的核心概念。 最近,我一直在尝试使用 Envelope Schemas 将包含多个记录的结果集拆分为单独的消息,并最终在上周通过使用以下教程使其工作;

https://docs.microsoft.com/en-us/biztalk/core/walkthrough-using-xml-envelopes-basic https://blog.tallan.com/2014/12/23/typed-polling-with-wcf-adapters/

如果可能的话,我正在寻找的是能够让我了解所涉及的机制的好心人,以便我可以确认我对流程的理解,以将其完全纳入我的解决方案。

我的理解是: 接收管道正在使用 XML 反汇编程序根据我将接收模式标记为信封来分解我的消息。

这就是我的问题所在。 在模式中,我将父节点的 Body XPath 设置为包含结果元素的最终节点上方的节点的 Body XPath。我为什么要这样做,它到底做了什么?

我对结果的模糊理解是,它从底部节点获取结果记录,并使用该 Body XPath 作为参考,从哪里获取子 nodes/elements 来创建新消息?

On the schema, I'm setting the node's Body XPath to that of the node ABOVE the final node containing the result elements. Why am I doing this, and what does it exactly?

My vague grasp of the outcome is that it grabs the resulting record from the bottom node, and uses that Body XPath as a reference on where to obtain the child nodes/elements to create the new message?

我(也是?)在理解措辞 Body XPath 背后的原因时遇到了一些困难,因为它实际上是你的信封selecting.

它在做什么:您告诉 BizTalk 该节点下的所有记录都应被视为单独的消息。它不必是单个记录,甚至不必是单一类型的消息。因此,您可以从单个数据源收集一堆不同的消息,然后单独处理它们。

它不是 'final/bottom' 节点之上的节点本身,因为信封可以包含许多其他类型(以防您想对接收部分进行一些验证)。

first link 中的示例几乎允许正文下方的任何 XML,因为它使用了 Any 元素。这意味着我可以在他们的示例中添加一条 Warning 记录:

<Envelope xmlns="http://BasicXMLEnvelope">
  <Error>
    <ID>102</ID>
    <Type>0</Type>
    <Priority>High</Priority>
    <Description>Sprocket query fails.</Description>
    <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
  </Error>
  <Error>
    <ID>16502</ID>
    <Type>2</Type>
    <Priority>Low</Priority>
    <Description>Time threshold exceeded.</Description>
    <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
  </Error>
  <Warning>
    <ID>333</ID>
    <Description>Just a warning.</Description>
    <WarningDateTime>2019-10-07T15:15:00.000+02:00</WarningDateTime>
  </Warning>
</Envelope>

使用所描述的分批处理方法,这条传入消息将导致消息框中出现三条消息;

<Error>
  <ID>102</ID>
  <Type>0</Type>
  <Priority>High</Priority>
  <Description>Sprocket query fails.</Description>
  <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
</Error>

...和...

<Error>
  <ID>16502</ID>
  <Type>2</Type>
  <Priority>Low</Priority>
  <Description>Time threshold exceeded.</Description>
  <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime>
</Error>

...和...

<Warning>
  <ID>333</ID>
  <Description>Just a warning.</Description>
  <WarningDateTime>2019-10-07T15:15:00.000+02:00</WarningDateTime>
</Warning>

...然后您可以订阅。

在我看来,如果您只有一个消息来源,其中每条消息都针对另一个目的地(例如不同的客户),或者目的地要求每条消息单独发送(例如目标发票架构,每个文件只允许一张发票)。

此方法的替代方法是一次仅 select 来自源的一条记录。