我的发送端口抛出错误并拒绝创建 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 以两种不同的方式查找架构
1) 如果您没有指定 DocSpecName,它会通过命名空间和根节点名称的组合来指定。如果没有命名空间,它将仅尝试根节点名称。由于您有多个具有相同根节点的模式,因此它不知道使用哪一个。 Sandro Pereira
发表了一篇关于此问题的各种原因的优秀博客文章2) 如果您在 XML 分解器或汇编器中指定 DocumentSpecName,它将使用类型名称、DLL 名称、版本号和公钥标记来查找它。
所以这给了你两个选择。
选项 A:将命名空间添加到 BizTalk 解决方案中的架构。然后将“添加命名空间”管道组件添加到解析传入 XML 的接收管道,并将“删除命名空间”管道组件添加到发送管道以删除该命名空间。因此,在外部它没有该命名空间,在 BizTalk 内部它有。
选项 B:确保没有命名空间但根名称相同的模式具有唯一的 DocumentSpecName。
这样,当您通过 Visual Studio 在 XML 汇编器中指定完整的文档规范名称(应包括程序集名称)时,它只会找到该 DLL 中匹配的一个架构。 Docspec 名称应该看起来更像是
DBLOG.ValidateMessage.IntegerSchema, DBLOG.ValidateMessage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=349a4171d9432c58
,根据 DocumentSpecNames? 的答案,除了类型名称之外,它还引用 DLL 名称、版本和公钥。事实上,即使您确实有命名空间,它也应该始终像 XML 汇编器或反汇编器中的那样。
有时,如果我们没有正确重启主机实例,就会出现此错误。需要检查以下步骤。
检查平面文件模式的根节点和目标名称空间。如果我们引用任何其他模式,请确保根节点应该是 BO 的名称。
如果上述步骤没问题..然后转到应用程序,然后转到架构节点并检查根节点和架构是否都存在于部署的文件中。
如果以上2条都没问题..然后重新启动所有主机实例。只有应用程序主机实例将无法工作。重新启动所有实例即可工作。
上述解决方案对我有用。