我遇到了BizTalk 2010的另一个问题。我应该以XML的形式接收记录集合。我收到的XML是一个包含多个记录的信封。我的简单任务是在XML中删除记录并将它们放入不同的文件夹而不使用编排。我创建了一个xsd,它保存了记录的结构,然后是另一个xsd,它是包含我导入它的前一个xsd的信封。我确实有一个指向xsd信封的xpath主体。到目前为止,一切似乎工作得很好,因为我从带有信封的xsd生成了一个XML,并使用xmldasm.exe来测试它。结果令人满意,因为XML按照预期以XML格式被分配到多个记录中。
然后,我只使用XML反汇编程序创建了一个自定义接收管道,并设置了正确的文档,然后成功部署了项目。在管理控制台中,我配置了我的应用程序,创建了一个类型为FILE的接收端口和发送端口。从发送端口,我将过滤器设置为BTS.MessageType == MyTestProject.MyXsdRoot
。
最后,我已成功开始申请。
但是,当我在InputFolder中删除了包含多条记录的测试信封XML(我在上面使用xmlDasm.exe测试过)时,文件夹中的XML已被使用,但OutputFolder中没有生成任何内容。从控制台,我看到了一个路由错误(可恢复)。显然,由于缺乏BizTalk经验,我忽略了一些东西。
有更多知识的人能指出错误或我应该做些什么来找出问题所在吗?
更新
-------- Envelope ----------------------------------
<?xml version="1.0" encoding="utf-16" ?>
- <xs:schema xmlns="http://UsingOrchestration.SetOfProcedures" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns0="http://UsingOrchestration.Procedures" targetNamespace="http://UsingOrchestration.SetOfProcedures" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="UsingOrchestration.Procedure" namespace="http://UsingOrchestration.Procedures" />
- <xs:annotation>
- <xs:appinfo>
<b:schemaInfo is_envelope="yes" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" />
- <b:references>
<b:reference targetNamespace="http://UsingOrchestration.Procedures" />
</b:references>
</xs:appinfo>
</xs:annotation>
- <xs:element name="SetOfProcedures">
- <xs:annotation>
- <xs:appinfo>
<b:recordInfo body_xpath="/*[local-name()='SetOfProcedures' and namespace-uri()='http://UsingOrchestration.SetOfProcedures']" />
</xs:appinfo>
</xs:annotation>
- <xs:complexType>
- <xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" ref="ns0:ProcedureCompleted" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
---------------------实际消息-------------------
<?xml version="1.0" encoding="utf-16" ?>
- <xs:schema xmlns="http://UsingOrchestration.Procedures" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://UsingOrchestration.Procedures" xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="ProcedureCompleted">
- <xs:complexType>
- <xs:sequence>
<xs:element name="AltID" type="xs:string" />
<xs:element name="RotationName" type="xs:string" />
<xs:element name="ProcedureID" type="xs:string" />
<xs:element name="ProcedureFee" type="xs:string" />
<xs:element name="Comment" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
--------- Test xml------------------------------------------
<ns0:SetOfProcedures xmlns:ns0="http://UsingOrchestration.SetOfProcedures">
<ns1:ProcedureCompleted xmlns:ns1="http://UsingOrchestration.Procedures">
<AltID>AltID_0</AltID>
<RotationName>RotationName_0</RotationName>
<ProcedureID>ProcedureID_0</ProcedureID>
<ProcedureFee>ProcedureFee_0</ProcedureFee>
<Comment>Comment_0</Comment>
</ns1:ProcedureCompleted>
<ns1:ProcedureCompleted xmlns:ns1="http://UsingOrchestration.Procedures">
<AltID>AltID_1</AltID>
<RotationName>RotationName_1</RotationName>
<ProcedureID>ProcedureID_1</ProcedureID>
<ProcedureFee>ProcedureFee_1</ProcedureFee>
<Comment>Comment_1</Comment>
</ns1:ProcedureCompleted>
<ns1:ProcedureCompleted xmlns:ns1="http://UsingOrchestration.Procedures">
<AltID>AltID_2</AltID>
<RotationName>RotationName_2</RotationName>
<ProcedureID>ProcedureID_2</ProcedureID>
<ProcedureFee>ProcedureFee_2</ProcedureFee>
<Comment>Comment_2</Comment>
</ns1:ProcedureCompleted>
</ns0:SetOfProcedures>
使用完全相同的XML,我可以按BTS.ReceivePortName
过滤它,该集合已正确地进行了调整,但当我按BTS.MessageType
过滤它时根本不处理。我一定错过了什么,只是不知道是什么。
答案 0 :(得分:0)
请检查您是否按照以下link中的所有步骤操作。也许您可能忘记在架构上设置 Envelope 属性。此外,您不需要用于XML debatching的自定义管道,因为默认的XMLReceive管道能够执行此操作。