【发布时间】:2014-01-08 13:16:38
【问题描述】:
我只是在创建一些小的 C# 程序来访问第三方 Web 服务。有不同的服务,但结构非常相似——尤其是在绑定的命名约定中
服务“QueryCustomerIn”的 WSDL
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...>
...
<wsdl:binding name="binding_SOAP12" type="tns:QueryCustomerIn">
...
</wsdl:binding>
<wsdl:service name="service">
<wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12">
<wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/querycustomerin1?sap-vhost=my123456.sapbydesign.com"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
“QueryOrganisationalCentreIn”的 WSDL
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...>
...
<wsdl:binding name="binding_SOAP12" type="tns:QueryOrganisationalCentreIn">
...
</wsdl:binding>
<wsdl:service name="service">
<wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12">
<wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/queryorganisationalcentrein?sap-vhost=my123456.sapbydesign.com"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
如您所见,两个服务都将它们的端点命名为“binding_SOAP12”,但每个都指向不同的位置。
当我在 Visual Studio 2010 中使用“添加服务引用”创建客户端时,我可以通过以下方式访问该服务:
QueryOrganisationalCentreInClient client = new QueryOrganisationalCentreInClient("binding_SOAP12");
但是当我添加第二个服务时,第二个服务的类似请求
QueryCustomerInClient client = new QueryCustomerInClient("binding_SOAP12");
失败并出现 System.InvalidOperationException(找不到端点或端点合同无效)。
我测试了一些东西,发现如下:
- 第一个客户端(组织...)仍然像添加第二个服务之前一样正常工作
- 如果我创建一个新项目并以相同的方式(但没有任何其他服务)添加第二个服务(客户...),它可以工作。
- 当我为 Customer...Service 编辑(提供的)WSDL 文件并将端点名称更改为不同的名称时,它也可以与第一个服务(组织...)一起在项目中工作
看起来 VisualStudio 2010 无法处理同一项目中不同服务合同中同名的端点。但由于我无法决定端点的命名:尽管有这个问题,我如何在我的项目中同时使用这两种服务?
提前致谢,
弗兰克
【问题讨论】:
-
我不是 c# 专家,但必须有一些配置才能根据操作名称或操作调用您的 web 服务,而不是直接从客户端调用整个绑定。
标签: c# visual-studio-2010 web-services wsdl endpoint