此汇编程序无法使用此类型和自定义SND_Pipeline检索文档规范

时间:2016-11-02 15:28:44

标签: xml biztalk

由于以下错误,我的send-port抛出错误并拒绝创建xml:

  

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

send-pipeline是一个简单的管道,它有一个带有添加模式“Schema_XML_WMS_301”的XML汇编程序(我添加了管道的屏幕截图)

当我更改要通过的管道时,我使用以下根

创建一个xml文档
<dcsmergedata xsi:noNamespaceSchemaLocation="../lib/interface_order_header.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <dataheaders>

模式似乎已经部署,可以在BizTalk的Schema选项卡中使用。 (第二个截图)

我现在不知道为什么会这样。这也似乎非常相似,但与我的另一个问题(Link)相反,所以我觉得我的管道有问题。

send pipeline

Schema's deployed

2 个答案:

答案 0 :(得分:3)

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

1)如果您没有指定DocSpecName,它会通过命名空间和根节点名称的组合来完成它。如果没有命名空间,它将只尝试根节点名称。由于您有多个具有相同根节点的模式,因此它不知道要使用哪个模式。关于此问题的各种原因的好博客文章是Sandro Pereira

2)如果在XML Dissasembler或Assembler中指定DocumentSpecName,它将使用类型名称,DLL名称,版本号和公钥令牌来查找它。

所以这给你两个选择。

选项A:在BizTalk解决方案中为架构添加命名空间。然后将Add Namespace管道组件添加到解析传入XML的Receive Pipeline,并将Remove Namespace管道组件添加到Send Pipeline以删除该命名空间。所以外部它没有那个命名空间,在BizTalk内部就是这样。

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

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

这样,当您通过Visual Studio在XML汇编程序中指定完整的doc规范名称(应该包含程序集名称)时,它将只找到该DLL中匹配的一个模式。根据{{​​3}}的答案,Docspec名称应该看起来更像DBLOG.ValidateMessage.IntegerSchema, DBLOG.ValidateMessage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=349a4171d9432c58,它也引用了DLL名称,版本和&amp;公共密钥除了类型名称。事实上,即使你确实有一个名称空间,它应该总是在XML Assembler或Dissasembler中看起来像那样。

答案 1 :(得分:0)

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

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

  1. 如果上述步骤正常。.然后转到应用程序,再转到Schema节点,并检查部署文件中是否同时存在rootnode和schema。

3。如果高于2,就可以了。然后重新启动所有主机实例。仅应用程序主机实例将不起作用。重新启动所有实例,它将起作用。

以上解决方案对我有用。