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 来自源的一条记录。
我目前正在自学 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 来自源的一条记录。