2013-01-16 3 views
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"); 

Однако я получаю сообщение об ошибке выполнения - «Не удалось найти элемент конечной точки с именем «ABCServiceV2» и заключить контракт «ABCService.IService» в разделе конфигурации клиента ServiceModel. Возможно, это связано с тем, что файл конфигурации не найден для вашего приложения или потому, что ни один элемент конечной точки, соответствующий этому имени, не может быть найден в клиентском элементе «.

если я использовал ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1");, тогда все работает нормально. Но при использовании ABCServiceV2 он пытается найти контракт - ABCService.IService - когда он должен искать - ABCService.IService1.

Как я могу найти правильный контракт?

+0

Адрес для ABCServiceV2 имеет «20» добавил до конца ... Я не уверен, если это не имеет ничего общего с ним или нет. Просто наблюдение. – user959729

+0

Я думаю, что это должно быть хорошо, так как «20» необходимо, чтобы сделать конечную точку другой. Обе конечные точки службы отлично работают на инструменте, таком как SoapUI. Таким образом, проблема находится где-то в клиентском коде. – ipoh

ответ

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

1

Даже если этот пост стар и ответил, что ответ не помог в моем случае. Моя проблема заключалась в том, что я сгенерировал сервис-клиент с инструментом svcutil.exe, но не указал какое-либо пространство имен вообще; и поэтому имя пространства имен контракта было создано как целевое пространство имен документа схемы по умолчанию, да полное беспорядок.

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

Надежда это помочь другим