【问题标题】:Multiple Services with equally named endpoints具有同名端点的多个服务
【发布时间】: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


【解决方案1】:

您的代码可能存在 2 个不同的问题。

你能显示你的.config吗?

您有时会得到 1 个binding name 和 2 个endpoint addresses 具有相同的contract。一个用于 1.1 Soap,另一个用于 1.2。您应该尝试删除其中一个。

在其他情况下,您可以有 1 个绑定名称和 2 个端点,但它仅适用于合同类不同

【讨论】:

  • 看一下 app.config 就足够了......如果已经有一个同名的端点(在我的例子中是 binding_SOAP121),向导会自动重命名端点。我认为 VS 可以通过它们所属的不同服务命名空间来区分 2 个端点。
【解决方案2】:

向导只是生成代码和配置的一种方式。如果您不喜欢它(因为它不起作用),只需进入您项目的app.config 并手动重命名一个绑定定义。

【讨论】:

  • 向导重命名了它们 - 所以这就是第二个服务不起作用的原因。感谢您将我推向正确的方向!
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2011-12-24
相关资源
最近更新 更多