Не удалось найти элемент конечной точки с именем и контрактом
Я добавил ссылку на службу 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.IService "в разделе конфигурации клиента ServiceModel. Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или из-за отсутствия элемент конечной точки, соответствующий этому имени, может быть найден в элементе client. "
если бы я использовал ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");
тогда все работает нормально. Но при использовании ABCServiceV2 он пытается найти контракт - ABCService.IService - когда он должен искать - ABCService.IService1.
Как мне заставить его искать правильный контракт?
2 ответа
Если вы добавили вторую ссылку на другой сервис (ABCServiceV2), то я считаю, что это создаст второй класс сервиса для ABCServiceV2. Два класса будут реализовывать отдельные контракты (ABCService.IService и ABCService.IService1), поэтому вы не сможете обменять конечные точки.
Я считаю, что вы должны иметь возможность инициализировать две конечные точки службы следующим образом:
ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2");
Несмотря на то, что этот пост старый и на него ответили, ответ не помог в моем случае. Моя проблема заключалась в том, что я сгенерировал служебный клиент с помощью инструмента svcutil.exe, но вообще не указал никакого пространства имен; и поэтому имя пространства имен контракта было сгенерировано как целевое пространство имен документа схемы по умолчанию, да, общий беспорядок.
С другой стороны, я пытался использовать файл конфигурации, сгенерированный при добавлении сервисной ссылки в проект. Пространство имен контракта в этом файле - ServiceReference1 (по умолчанию) или любое другое имя, которое вы хотите, идеальный шторм! Но все, что мне нужно было сделать, это удалить часть пространства имен из FQN из <endpoint>
атрибут контракта, и контракт стал видимым для CLR.
Надеюсь, что это поможет другим