我有两个不同的服务器,运行两个类似的WCF服务。两种服务完全相同(克隆)。我必须在单个业务流程中使用这两个服务,因为我必须相互通信。 (我正在使用“添加生成的项目”来添加服务引用)。我想从一个名为“Get”的服务方法获取数据,并将其发送给其他人“发送”方法。部署项目后,我收到错误"Cannot locate document specification because multiple schemas matched the message type #####"
。
我已经阅读了一个使用特定文档架构创建自定义管道的解决方案但是没有用。
我如何处理这种情况?
答案 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#MyMethodResponse
和MessageContracts
)的根元素名称。
在这种情况下(即常见的.xsd
),除了basvo的答案之外,您还可以解决以下问题:
但是,如果您的Web服务发生更改并且您需要再次“刷新”导入的模式,这会很麻烦 - 如果导入向导检测到重复的模式并提供以这种方式为您合并它,那将是一个很好的功能。 / p>
* 更新 - 只是为了澄清,在您的orch设计中重用相同的逻辑发送端口,但在已部署的BTS服务器/集群中创建新的发送端口,将发送端口订阅到所需的消息/链接第二个Orch到发送端口(取决于您是否使用直接绑定),显然将绑定更改为第二个URL。
答案 2 :(得分:0)
由于这些服务是相同的,因此只需为其中任何一个添加服务引用即可添加所需的模式。只需为BizTalk MMC中的每个服务创建单独的发送端口,并在配置时将业务流程中创建的逻辑端口连接到正确的发送端口编排。
此解决方案工作.....