【问题标题】:Explanation of BizTalk envelope schemas and debatchingBizTalk 信封架构和分批的说明
【发布时间】:2019-10-07 08:11:01
【问题描述】:

作为新角色的一部分,我目前正在自学 BizTalk,并掌握了开发编排和配置管道的核心概念。 最近,我一直在尝试使用信封模式将包含多条记录的结果集分批成单独的消息,并在上周使用以下教程终于让它工作了;

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 作为从何处获取子节点/元素以创建新消息的参考?

【问题讨论】:

    标签: biztalk biztalk-2013r2 envelope-schema


    【解决方案1】:

    在架构上,我将节点的 Body XPath 设置为包含结果元素的最终节点之上的节点。我为什么要这样做,具体是做什么的?

    我对结果的模糊理解是它从底部节点获取结果记录,并使用该 Body XPath 作为从何处获取子节点/元素以创建新消息的参考?

    我(也是?)理解措辞 Body XPath 背后的原因有些困难,因为它实际上是您选择的信封。

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

    它本身不是“最终/底部”节点上方的节点,因为信封可以包含许多其他类型(如果您想对接收部分进行一些验证)。

    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>
    

    使用所描述的debatching方法,这个单一的传入消息将导致消息框中的三个消息;

    <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>
    

    ...然后您可以订阅。

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

    此方法的替代方法是一次只从源中选择一条记录。

    【讨论】:

    • 太完美了,谢谢@Ruud - 很高兴看到我走在了正确的道路上!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多