从自定义管道中过滤消息

时间:2013-01-01 05:06:51

标签: biztalk biztalk-2010

我遇到了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过滤它时根本不处理。我一定错过了什么,只是不知道是什么。

1 个答案:

答案 0 :(得分:0)

请检查您是否按照以下link中的所有步骤操作。也许您可能忘记在架构上设置 Envelope 属性。此外,您不需要用于XML debatching的自定义管道,因为默认的XMLReceive管道能够执行此操作。

相关问题