0

我遇到了 BizTalk 2010 的另一个问题。我应该收到 XML 格式的记录集合。我收到的 XML 是一个信封,里面有多个记录。我的简单任务是在不使用编排的情况下对 XML 中的记录进行分批并将它们放入不同的文件夹中。我创建了一个保存记录结构的 xsd,然后创建了另一个 xsd,它是包含我导入的前一个 xsd 的信封。我确实有一个指向 xsd 信封的 xpath-body。到目前为止,一切似乎都运行良好,因为我已经从带有信封的 xsd 生成了一个 XML,并且确实使用 xmldasm.exe 对其进行了测试。结果令人满意,因为 XML 按预期分批成 XML 格式的多个记录。

然后,我只使用 XML 反汇编程序创建了一个自定义接收管道并设置了正确的文档,然后成功部署了项目。从管理控制台,我配置了我的应用程序,创建了 FILE 类型的接收端口和发送端口。从发送端口,我将过滤器设置为BTS.MessageType == MyTestProject.MyXsdRoot.

最后,我已经成功启动了我的应用程序。

但是,当我在 InputFolder 中删除一个包含多个记录的测试信封 XML(我使用上面的 xmlDasm.exe 测试过的那个)时,文件夹中的 XML 被消耗,但在 OutputFolder 中没有生成任何内容。从控制台,我看到了一个路由错误(可恢复)。显然,由于缺乏 BizTalk 经验,我忽略了一些事情。

有更多知识的人可以指出哪里出了问题,或者我应该怎么做才能找出问题所在?

更新:

- - - - 信封 - - - - - - - - - - - - - - - - -

<?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。我一定错过了什么,只是不知道是什么。

4

1 回答 1

0

请检查您是否遵循以下链接中的所有步骤。也许您可能忘记在模式上设置Envelope属性。此外,您不需要用于 XML 分批的自定义管道,因为默认的 XMLReceive 管道能够做到这一点。

于 2013-01-08T09:06:09.327 回答