C# Biztalk自定义管道组件:XmlSchemaException

C# Biztalk自定义管道组件:XmlSchemaException,c#,biztalk,biztalk-2010,C#,Biztalk,Biztalk 2010,我有一个带有以下组件的自定义发送管道: 预装配: 无组件 集合 XML汇编程序 编码 自定义组件1 XML验证程序 自定义组件2 通过这种配置,我总是在“自定义组件2”中得到一个XmlSchemaException。 异常消息是“元素不能包含空格”。内容模型为空。” 这很奇怪,因为当我删除例如“CustomComponent 1”或“XML validator”时,它工作正常。只有当我将所有3个组件都放在适当的位置时,我才会得到异常 你知道我需要检查什么才能让它与所有组件一起工作吗

我有一个带有以下组件的自定义发送管道:

预装配:

  • 无组件
集合

  • XML汇编程序
编码

  • 自定义组件1
  • XML验证程序
  • 自定义组件2
通过这种配置,我总是在“自定义组件2”中得到一个XmlSchemaException。 异常消息是“元素不能包含空格”。内容模型为空。”

这很奇怪,因为当我删除例如“CustomComponent 1”或“XML validator”时,它工作正常。只有当我将所有3个组件都放在适当的位置时,我才会得到异常

你知道我需要检查什么才能让它与所有组件一起工作吗

谢谢你,并致以最良好的问候
Michael

最有可能是组件1添加了一个带有一些无效值的XmlElement节点,例如为复杂类型节点(记录节点)添加空值
(在之后添加空值,然后出现)
。 若在消息到达组件1之前使用映射创建Xml,那个么它也可能发生在组件1中

  • 尝试在validate阶段删除自定义组件2和XmlValidator,查看输出xml是如何进入文件夹的,并尝试在notepad++中查看它
  • 使用Xml模式验证上述步骤的输出消息

我假设您更改了自定义组件1中的消息?您确定消息的正文流是正确的,并且在更改后设置为正确的长度吗?在第一个组件中,我更改消息并将新的内存流分配给BodyPart.Data(并将流的位置设置为0)您是否尝试将流记录到此行之前的某个位置的字符串?您可以尝试查看它是否存在任何问题。是的,我创建了一个StreamReader并使用了“ReadToEnd()”,但这也会引发相同的XmlSchemaException(当我在管道中有所有3个组件时)您好,我在组件1之后捕获了xml,并在外部工具中根据XSD对其进行了验证-它是有效的。我最终找到了3个导致错误的节点。它们都有属性,但没有节点值,例如:我如何使其与此场景一起工作?谢谢!您可以在此处添加架构和生成的xml吗。是否尝试添加值和这些节点,并查看其是否有效?
Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
  ReadOnlySeekableStream stream = new ReadOnlySeekableStream(pInMsg.BodyPart.GetOriginalDataStream());
  XDocument doc;
  //Exception on next line:
  using(XmlReader reader = XmlReader.Create(stream))
  {
    reader.MoveToContent();
  }
}