简单编排中的Debatching Envelope错误0xC0C01B4C

时间:2017-10-10 20:46:26

标签: biztalk

我们有一个简单的Envelope XML,我试图在HTTP发送/接收端口的接收端使用自定义管道进行解压缩。 BizTalk将通过信封中的第一组,但我们得到的错误是0xC0C01B4C(Zombie)。出于测试目的,我将接收结果发送到文件格式的文件夹。我希望之前有人见过这个,因为我一直在尝试许多不同的方法来解决这个问题。

这是信封消息

<?xml version="1.0" encoding="utf-16" ?> 
<xs:schema xmlns="http://CC.Schemas.ADDR.ADDR_IDs_Envelope" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ids="http://CC.Schemas.ADDR.ADDR_IDs" targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs_Envelope" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import schemaLocation=".\ADDR_IDs.xsd" namespace="http://CC.Schemas.ADDR.ADDR_IDs" /> 
    <xs:annotation>
        <xs:appinfo>
            <b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" /> 
            <b:references>
                <b:reference targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs" /> 
            </b:references>
        </xs:appinfo>
    </xs:annotation>
    <xs:element name="ADDR_IDs_Envelope">
        <xs:annotation>
            <xs:appinfo>
                <b:recordInfo body_xpath="/*[local-name()='ADDR_IDs_Envelope' and namespace-uri()='http://CC.Schemas.ADDR.ADDR_IDs_Envelope']/*[local-name()='Messages' and namespace-uri()='']" /> 
            </xs:appinfo>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Messages">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" ref="ids:ADDR_IDs" /> 
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

详细信息ID的架构

<?xml version="1.0" encoding="utf-16" ?> 
<xs:schema xmlns="http://CC.Schemas.ADDR.ADDR_IDs" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://CC.Schemas.ADDR.ADDR_IDs" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="ADDR_IDs">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="TransactionID" type="xs:string" /> 
                <xs:element name="JWID" type="xs:positiveInteger" /> 
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Orchestration

2 个答案:

答案 0 :(得分:0)

很简单,您的Orchestration缺少一个循环,它会侦听同一个Correlation的下一条消息。因此,在处理完第一条消息后,它将退出,而其他消息则不会被处理。

您需要的概念称为顺序车队。您需要在循环内部具有另一个接收形状(其具有在第一个接收形状上初始化的跟随相关集作为初始化相关集)以及退出循环的方式,例如,下面是等待退出循环的时间限制。你需要让这个退出条件正确,否则仍有可能出现僵尸。

enter image description here

答案 1 :(得分:0)

我想发布一个关于此问题的更新,因为我决定使用Orchestration Pipeline Method并遇到架构问题。要解决这个问题,我必须

1 - 将我的接收消息和端口更改为System.Xml.XmlDocument消息类型,而不是将其设置为我的架构。您还必须将接收管道设置为PassTrhuReceive而不是XML Transmit。由于XML传输管道将自动解除。这允许我的循环按照我的意愿处理Orchestration中的debatching。我正在使用发送/接收http端口,并且能够正常工作

关于这一点,您必须使用带有Orchestration Pipeline方法的Scope,这样它就不会像我预期的那样按顺序发送消息。

在我的一个编排中,我还必须使用顺序护送,以便我可以按顺序处理信封消息,而不是所有这些消息都需要这样,所以第一种方法很有效地修复了我有的Zombie消息问题。由于我已将此操作分成两部分,因此我最终将信封保存到文件夹中,然后将其拾取并通过顺序护送处理它。

现在一切正常运作