Не удалось найти элемент конечной точки с именем и контрактом

я добавил ссылку на службу 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 tool, но не указал никакого пространства имен вообще; и поэтому имя пространства имен контракта было создано как целевое пространство имен документа схемы по умолчанию, да total mess.

С другой стороны, я пытался использовать файл конфигурации, созданный при добавлении ссылки на службу в проект. Пространство имен контракта в этом файле ServiceReference1 (по умолчанию) или любое другое имя, которое вы хотите, идеальный шторм! Но все, что мне нужно было сделать, это удалить часть пространства имен из FQN из <endpoint> ' s атрибут контракта, и контракт стал видимым для среды CLR.

надеюсь, это поможет другим