InvalidOperationException при создании экземпляра веб-службы wcf - PullRequest
6 голосов
/ 24 августа 2008

У меня есть веб-служба WCF, на которую ссылается библиотека классов. После запуска проекта при создании объекта клиента службы из библиотеки классов я получаю исключение InvalidOperationException с сообщением:

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт MyServiceReference.IMyService в клиенте ServiceModel раздел конфигурации. Это может быть потому, что файл конфигурации не был найден для вашего приложения, или потому что не соответствует элемент конечной точки этот контракт можно найти в элементе client.

Код, который я использую для создания экземпляра:

myServiceClient = new MyServiceClient();

, где MyServiceClient наследуется от

System.ServiceModel.ClientBase

Как мне решить эту проблему?

Примечание. У меня есть отдельное консольное приложение, которое просто создает один и тот же объект службы и выполняет к нему вызовы, и оно работает без проблем.

Ответы [ 4 ]

8 голосов
/ 11 марта 2010

Или вы можете установить конечную точку в вашем коде:

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);
4 голосов
/ 24 августа 2008

Вот мой файл app.config библиотеки классов:

Вы должны поместить эти параметры конфигурации в файл конфигурации основного приложения. Приложение .NET (которое вызывает вашу библиотеку классов) использует данные из своего собственного файла конфигурации, а не из файла конфигурации вашей библиотеки.

1 голос
/ 11 ноября 2009

У меня был похожий случай. У меня была библиотека классов, которая называлась веб-службой, затем у меня был .EXE, который называл .DLL библиотеки классов. Я думаю, что используется файл конфигурации .EXE, а не файл конфигурации .DLL.

Но, как сказал выше Ричард, мне пришлось полностью определить пространство имен. Это немного боли. Ниже именно то, что я изменил. Боль в том, что мне пришлось изменить это в двух местах, один в файле reference.cs, который создается при создании ссылки на службу, а другой - в файле конфигурации. Таким образом, каждый раз, когда я меняю веб-сервис и выполняю «Ссылку на обновление», мне приходится снова вносить изменения в код C #.

1) Вы действительно должны изменить имя_конфигурации в файле reference.cs следующим образом:

От: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

Кому: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2), а затем также измените значение «контракта» во всех связанных файлах app.config (для .dll и .exe) следующим образом:

От:

<адрес конечной точки = <a href="http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc" rel="nofollow noreferrer">http://nxwtest08bt1.dev.txfb -ins.com / TFBIC.RCT.BizTalk.Orchestrations / WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" контракт = "RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" имя = "WSHttpBinding_ITwoWayAsync">

Кому:

<адрес конечной точки = <a href="http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc" rel="nofollow noreferrer">http://nxwtest08bt1.dev.txfb -ins.com / TFBIC.RCT.BizTalk.Orchestrations / WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" contract = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name = "WSHttpBinding_ITwoWayAsync">

Просто чтобы прояснить - как я узнал, что такое полное пространство имен? Пространство имен программы было TFBIC.RCT.HIP. Внутри этого кода C # есть еще один оператор пространства имен:

namespace RCTHipComponents
0 голосов
/ 24 августа 2008

Вероятно, это поможет, если вы разместите свой файл app.config, так как ошибки такого рода обычно указывают на проблему в блоке <endpoint>. Убедитесь, что атрибут контракта вам подходит.

Редактировать: Попробуйте полностью определить стоимость вашего контракта; использовать полное пространство имен. Я думаю, что это необходимо.

...