找不到带有名称和合同的端点元素

本文关键字:端点 元素 合同 有名称 找不到 | 更新日期: 2023-09-27 17:53:40

我添加了对具有两个端点的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");

然而,我得到一个运行时错误- "无法找到端点元素名称'ABCServiceV2'和合同'ABCService。ServiceModel客户端配置部分中的IService'。这可能是因为没有找到您的应用程序的配置文件,或者是因为在客户端元素中没有找到与此名称匹配的端点元素。"

如果我使用ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");,那么一切都可以正常工作。但是当使用ABCServiceV2时,它试图寻找Contract - ABCService。当它应该寻找ABCService.IService1时。

我如何使它看起来是正确的合同?

找不到带有名称和合同的端点元素

如果您添加了对不同服务(ABCServiceV2)的第二个引用,那么我相信这将为ABCServiceV2生成第二个服务类。这两个类将实现单独的契约(ABCService)。IService和ABCService.IService1),因此您将无法交换端点。

我相信你应该能够像这样初始化你的两个服务端点:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2");

尽管这篇文章很老了,而且已经有人回答了,但这个答案对我的情况没有帮助。我的问题是我用svcutil.exe工具生成了服务客户端,但根本没有指定任何命名空间;因此,契约名称空间名称是默认情况下作为模式文档的目标名称空间生成的,是的,完全混乱。

另一方面,我试图使用在将服务引用添加到项目时生成的配置文件。该文件中的契约名称空间是ServiceReference1(默认情况下)或您想要的任何其他名称,完美风暴!但是我所要做的就是从FQN中从<endpoint>的contract属性中删除命名空间部分,然后CLR就可以看到该契约了。

希望对别人有所帮助