找不到名称和契约的终结点元素

6

我已经添加了一个引用到一个具有两个终点的 WCF 服务。在添加服务时,以下内容会添加到配置文件中:

<client>
  <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc"
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1"
    contract="ABCService.IService"  />
  <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20"
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2"
    contract="ABCService.IService1"  />
</client>

创建客户端的代码如下:
ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2");

然而,我遇到了一个运行时错误 - “在ServiceModel客户端配置部分中找不到名称为'ABCServiceV2'和合同为'ABCService.IService'的终结点元素。这可能是因为找不到应用程序的配置文件,或者因为未找到与此名称匹配的终结点元素。” 如果我使用ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); ,那么一切正常。但是当使用ABCServiceV2时,它会尝试查找合同 - ABCService.IService - 而应该查找 - ABCService.IService1。 我该如何使它查找正确的合同?

ABCServiceV2的地址末尾添加了“20”...我不确定这是否与此有关。只是一个观察。 - user959729
我认为这应该没问题,因为“20”是必需的,以使端点不同。服务的两个端点在像SoapUI这样的工具上都可以正常工作。因此,问题可能出现在客户端代码中。 - ipoh
2个回答

3
如果您添加了对另一个服务(ABCServiceV2)的第二个引用,那么我认为这将生成ABCServiceV2的第二个服务类。这两个类将实现单独的合同(ABCService.IService和ABCService.IService1),因此您将无法交换端点。
我认为您应该能够像这样初始化您的两个服务端点:
ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2");

1
谢谢。问题在于我使用了ServiceClient而不是Service1Client。以下代码可以正常工作:ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); - ipoh

3
尽管这篇文章已经很老并且有答案,但是对我并没有帮助。我的问题是我使用svcutil.exe工具生成了服务客户端,但是没有指定任何命名空间;因此,合同命名空间名称默认生成为模式文档的目标命名空间,混乱不堪。
另一方面,我试图使用添加到项目中的服务引用生成的配置文件。该文件中的合同命名空间是ServiceReference1(默认值)或您想要的任何其他名称,非常棒!但我所要做的就是从<endpoint>的合同属性的FQN中删除命名空间部分,合同就变得对CLR可见了。
希望这可以帮助其他人。

这虽然有点老,但是帮了我很大的忙。正是我的问题所在。只需在合同属性中使用接口名称,不需要命名空间,就可以解决问题... - kdrapel
你把它修在哪里了,你得移除了多少命名空间? - Trevortni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接