此汇编器无法通过自定义 SND_Pipeline 检索使用此类型的文档规范

问题描述 投票:0回答:2

我的发送端口抛出错误并拒绝创建 xml,因为出现以下错误:

错误详细信息:执行发送管道“SND_WMS_301”时失败 原因:此汇编器无法使用此类型检索文档规范:“dcsmergedata”。

发送管道是一个简单的管道,它有一个 XML 汇编器,并添加了模式“Schema_XML_WMS_301”(我添加了管道的屏幕截图)

当我更改要通过的管道时,我使用以下根创建一个 xml 文档

<dcsmergedata xsi:noNamespaceSchemaLocation="../lib/interface_order_header.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <dataheaders>

该架构似乎已部署,并且可以在 BizTalk 的“架构”选项卡中找到。 (第二张截图)

我现在不知道为什么会这样。这个问题看起来也非常相似,但与我的其他问题相反(Link),所以我觉得我的管道做错了。

xml biztalk
2个回答
4
投票

此处的问题看起来与您的其他问题类似,因为您的 XML 负载没有命名空间。 BizTalk 以两种不同的方式查找架构

1) 如果您没有指定 DocSpecName,它会通过命名空间和根节点名称的组合来指定。如果没有命名空间,它将仅尝试根节点名称。由于您有多个具有相同根节点的模式,因此它不知道使用哪一个。 Sandro Pereira

发表了一篇关于此问题的各种原因的优秀博客文章

2) 如果您在 XML 分解器或汇编器中指定 DocumentSpecName,它将使用类型名称、DLL 名称、版本号和公钥标记来查找它。

所以这给了你两个选择。

选项 A:将命名空间添加到 BizTalk 解决方案中的架构。然后将“添加命名空间”管道组件添加到解析传入 XML 的接收管道,并将“删除命名空间”管道组件添加到发送管道以删除该命名空间。因此,在外部它没有该命名空间,在 BizTalk 内部它有。

选项 B:确保没有命名空间但根名称相同的模式具有唯一的 DocumentSpecName。

  • 要么驻留在单独的项目中。
  • 驻留在 DLL 的不同版本中
  • 有一个不同的类型名称(这通常是最快和最好的选择)

这样,当您通过 Visual Studio 在 XML 汇编器中指定完整的文档规范名称(应包括程序集名称)时,它只会找到该 DLL 中匹配的一个架构。 Docspec 名称应该看起来更像是

DBLOG.ValidateMessage.IntegerSchema, DBLOG.ValidateMessage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=349a4171d9432c58
,根据 DocumentSpecNames? 的答案,除了类型名称之外,它还引用 DLL 名称、版本和公钥。事实上,即使您确实有命名空间,它也应该始终像 XML 汇编器或反汇编器中的那样。


0
投票

有时,如果我们没有正确重启主机实例,就会出现此错误。需要检查以下步骤。

  1. 检查平面文件模式的根节点和目标名称空间。如果我们引用任何其他模式,请确保根节点应该是 BO 的名称。

  2. 如果上述步骤没问题..然后转到应用程序,然后转到架构节点并检查根节点和架构是否都存在于部署的文件中。

  3. 如果以上2条都没问题..然后重新启动所有主机实例。只有应用程序主机实例将无法工作。重新启动所有实例即可工作。

上述解决方案对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.