此汇编程序无法检索使用此类型和自定义 SND_Pipeline 的文档规范
This Assembler cannot retrieve a document specification using this type with a Custom SND_Pipeline
我的发送端口抛出错误并拒绝创建 xml,因为以下错误:
Error details: There was a failure executing the send pipeline "SND_WMS_301"
Reason: This Assembler cannot retrieve a document specification using this type: "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,它将通过命名空间和根节点名称的组合来指定。如果没有名称空间,它将仅通过根节点名称进行尝试。由于您有多个具有相同根节点的模式,因此它不知道要使用哪一个。关于此问题的各种原因的一篇很好的博客 post 是 Sandro Pereira
2) 如果您在 XML 反汇编程序或汇编程序中指定 DocumentSpecName,它会使用类型名称、DLL 名称、版本号和 Public 密钥标记来查找它。
所以这给了你两个选择。
选项 A:将命名空间添加到 BizTalk 解决方案中的架构。然后将添加命名空间管道组件添加到解析传入 XML 的接收管道,并将删除命名空间管道组件添加到发送管道以删除该命名空间。所以在外部它没有那个命名空间,在 BizTalk 内部它有。
选项 B:确保没有命名空间但根名称相同的模式具有唯一的 DocumentSpecName。
- 驻留在单独的项目中。
- 驻留在 DLL 的不同版本中
- 使用不同的类型名称(这通常是最快和最好的选择)
这样,当您通过 Visual Studio 在 XML 汇编程序中指定完整的文档规范名称(应包括程序集名称)时,它只会在该 DLL 中找到一个模式匹配。根据对 DocumentSpecNames? 的回答,Docspec 名称应该看起来更像 DBLOG.ValidateMessage.IntegerSchema, DBLOG.ValidateMessage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=349a4171d9432c58
,除了类型名称之外,它还引用了 DLL 名称、版本和 Public 密钥。事实上,它在 XML 汇编器或反汇编器中应该总是看起来像那样,即使你确实有一个命名空间。
如果我们没有正确重启主机实例,有时会出现此错误。以下步骤需要检查。
1.Check 平面文件架构的根节点和目标名称 space。如果我们引用任何其他模式,请确保根节点应该是 BO 的名称。
- 如果以上步骤没问题..然后去application,然后去Schema节点检查部署文件中是否存在rootnode和schema。
3.If上面2个都可以..然后重启所有主机实例。只有应用程序主机实例不会工作。重新启动所有,它会工作。
以上解决方案对我有用。
我的发送端口抛出错误并拒绝创建 xml,因为以下错误:
Error details: There was a failure executing the send pipeline "SND_WMS_301" Reason: This Assembler cannot retrieve a document specification using this type: "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,它将通过命名空间和根节点名称的组合来指定。如果没有名称空间,它将仅通过根节点名称进行尝试。由于您有多个具有相同根节点的模式,因此它不知道要使用哪一个。关于此问题的各种原因的一篇很好的博客 post 是 Sandro Pereira
2) 如果您在 XML 反汇编程序或汇编程序中指定 DocumentSpecName,它会使用类型名称、DLL 名称、版本号和 Public 密钥标记来查找它。
所以这给了你两个选择。
选项 A:将命名空间添加到 BizTalk 解决方案中的架构。然后将添加命名空间管道组件添加到解析传入 XML 的接收管道,并将删除命名空间管道组件添加到发送管道以删除该命名空间。所以在外部它没有那个命名空间,在 BizTalk 内部它有。
选项 B:确保没有命名空间但根名称相同的模式具有唯一的 DocumentSpecName。
- 驻留在单独的项目中。
- 驻留在 DLL 的不同版本中
- 使用不同的类型名称(这通常是最快和最好的选择)
这样,当您通过 Visual Studio 在 XML 汇编程序中指定完整的文档规范名称(应包括程序集名称)时,它只会在该 DLL 中找到一个模式匹配。根据对 DocumentSpecNames? 的回答,Docspec 名称应该看起来更像 DBLOG.ValidateMessage.IntegerSchema, DBLOG.ValidateMessage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=349a4171d9432c58
,除了类型名称之外,它还引用了 DLL 名称、版本和 Public 密钥。事实上,它在 XML 汇编器或反汇编器中应该总是看起来像那样,即使你确实有一个命名空间。
如果我们没有正确重启主机实例,有时会出现此错误。以下步骤需要检查。
1.Check 平面文件架构的根节点和目标名称 space。如果我们引用任何其他模式,请确保根节点应该是 BO 的名称。
- 如果以上步骤没问题..然后去application,然后去Schema节点检查部署文件中是否存在rootnode和schema。
3.If上面2个都可以..然后重启所有主机实例。只有应用程序主机实例不会工作。重新启动所有,它会工作。
以上解决方案对我有用。