由于以下错误,我的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)相反,所以我觉得我的管道有问题。
答案 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。
这样,当您通过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的名称。
3。如果高于2,就可以了。然后重新启动所有主机实例。仅应用程序主机实例将不起作用。重新启动所有实例,它将起作用。
以上解决方案对我有用。