在BizTalk中部署多个类似的模式

时间:2013-01-30 09:36:23

标签: schema biztalk biztalk-orchestrations

我有两个不同的服务器,运行两个类似的WCF服务。两种服务完全相同(克隆)。我必须在单个业务流程中使用这两个服务,因为我必须相互通信。 (我正在使用“添加生成的项目”来添加服务引用)。我想从一个名为“Get”的服务方法获取数据,并将其发送给其他人“发送”方法。部署项目后,我收到错误"Cannot locate document specification because multiple schemas matched the message type #####"

我已经阅读了一个使用特定文档架构创建自定义管道的解决方案但是没有用。

我如何处理这种情况?

3 个答案:

答案 0 :(得分:1)

问题是您现在在BizTalk应用程序中有多个具有相同名称空间和根元素的模式。

您需要在" get service"的DocumentSpecNames上设置XMLReceivePipeline属性。以及您的"发送服务的XMLTransmitPipeline"告诉BizTalk使用哪一个。

此值的基本格式为... Schemaname+Rootname,Assembly

示例:

Company.Schemas.Messages+GetReply,Company.Schemas, 
   Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

答案 1 :(得分:1)

如果服务确实相同,那么您不需要使用向导两次导入模式 - 只需导入第一个服务的WSDL以创建模式和端口类型,然后创建新的发送端口*并更改相应的绑定指向第二个服务(即特别是服务URL)。

如果您的WCF服务使用MessageContracts接受或返回相同的消息有效负载以进行多个服务调用(而不是DataContract,那么您通常会发生'xmlns#MyMethod,这通常会发生这种情况。表单xmlns#MyMethodResponseMessageContracts)的根元素名称。

在这种情况下(即常见的.xsd),除了basvo的答案之外,您还可以解决以下问题:

  1. 将所有使用的WCF服务的所有工件导入到Visual Studio中的BTS项目中。
  2. 保留每个请求(或响应模式)的第一个“实例”,然后在VS的Orchestration视图中,遍历每个第二个和后续端口类型并删除重复的请求或响应消息(“操作消息”)在端口类型上。 (在每个端口类型下,您应该看到请求,响应以及任何故障消息类型)
  3. 然后,您需要“编辑”已删除的每种邮件类型,然后手动将其更改为您保留的架构的原始实例。
  4. 您可能还需要删除导致导入的{{1}}文件中的重复邮件类型,或者更糟糕的是,黑客攻击。
  5. 但是,如果您的Web服务发生更改并且您需要再次“刷新”导入的模式,这会很麻烦 - 如果导入向导检测到重复的模式并提供以这种方式为您合并它,那将是一个很好的功能。 / p>

    * 更新 - 只是为了澄清,在您的orch设计中重用相同的逻辑发送端口,但在已部署的BTS服务器/集群中创建新的发送端口,将发送端口订阅到所需的消息/链接第二个Orch到发送端口(取决于您是否使用直接绑定),显然将绑定更改为第二个URL。

答案 2 :(得分:0)

由于这些服务是相同的,因此只需为其中任何一个添加服务引用即可添加所需的模式。只需为BizTalk MMC中的每个服务创建单独的发送端口,并在配置时将业务流程中创建的逻辑端口连接到正确的发送端口编排。

此解决方案工作.....