客户端和服务器端之间的WCF服务合同名称不匹配

时间:2011-11-12 08:59:10

标签: wcf wcf-client

我试图将我的Web应用程序与两个WCF服务集成,这两个服务提供了相同的服务合同名称,但是位于两个不同的地址中。问题是我想在一个DLL中为两个服务创建代理,但这是不可行的,因为两个契约都保持相同的名称,我试图像嵌套的名称空间一样使用,它也不起作用,因为代理托管在一个除了web项目之外,我更改了一个服务合同的名称,但是我收到了这个错误:

  

带有Action的消息   'http://ws.aramex.net/ShippingAPI/v1/RateCalculateService/CalculateRate'   由于ContractFilter不匹配,无法在接收方处理   在EndpointDispatcher。这可能是因为合同   不匹配(发送者和接收者之间的不匹配行为)或a   发送方和接收方之间的绑定/安全性不匹配。校验   发件人和收件人具有相同的合同和相同的约束力   (包括安全要求,例如消息,传输,无)。

是否可以通过任何方式在客户端使用不同于服务器端的合同名称?

端点:

<client>
      <endpoint address="http://ws.dev.aramex.net/shippingapi/shipping/service_1_0.svc"
          binding="basicHttpBinding" bindingConfiguration="basic"
          contract="Service_1_0" name="BasicHttpBinding_Service_1_0" />

      <endpoint address="http://ws.aramex.net/shippingapi/ratecalculator/service_1_0.svc"
         binding="basicHttpBinding" bindingConfiguration="basic"
         contract="RateCalculateService" name="BasicHttpBinding_Service_1_0" />
    </client>

第二个端点的原始合约名称为“Service_1_0”

3 个答案:

答案 0 :(得分:0)

不是WCF专家,但为什么不通过创建代理原始服务的2个服务并为每个服务创建唯一的合同名称来解决这个问题?

答案 1 :(得分:0)

在引用您的WSDL文件时,您应该完成以下操作:

  • 右键点击“服务参考”
  • 添加服务参考
  • 在“消息/文本”框中,输入WSDL的本地路径并搜索它
  • 在同一窗口中有一个“高级”按钮,点击它。
  • 选中指定“始终生成邮件合同”的复选框

答案 2 :(得分:0)

  

我试图将我的Web应用程序与两个WCF服务集成,这两个服务提供了相同的服务合同名称,但是位于两个不同的地址中。

您说同样的服务合同名称?你的意思是服务合同是一样的吗?

如果是这样,为什么不指定具有不同名称和相同合同的两个端点:

<client>
    <endpoint address="http://ws.dev.aramex.net/shippingapi/shipping/service_1_0.svc"
      binding="basicHttpBinding" bindingConfiguration="basic"
      contract="Service_1_0" name="BasicHttpBinding_Service_1_0_Instance1" />

      <endpoint address="http://ws.aramex.net/shippingapi/ratecalculator/service_1_0.svc"
         binding="basicHttpBinding" bindingConfiguration="basic"
         contract="Service_1_0" name="BasicHttpBinding_Service_1_0_Instance2" />
</client>

然后将端点名称(BasicHttpBinding_Service_1_0_Instance1BasicHttpBinding_Service_1_0_Instance2用于上述示例)指定为适当代理类构造函数重载的参数endpointConfigurationName