我试图将我的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”
答案 0 :(得分:0)
不是WCF专家,但为什么不通过创建代理原始服务的2个服务并为每个服务创建唯一的合同名称来解决这个问题?
答案 1 :(得分:0)
在引用您的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_Instance1
或BasicHttpBinding_Service_1_0_Instance2
用于上述示例)指定为适当代理类构造函数重载的参数endpointConfigurationName
。