Сведения о вопросе

FUTER

09:01, 9th August, 2020

Теги

.net   wcf   web-services    

Исключение InvalidOperationException при создании экземпляра веб-службы wcf

Просмотров: 512   Ответов: 4

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

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

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

myServiceClient = new MyServiceClient();

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

System.ServiceModel.ClientBase

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

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



  Сведения об ответе

nYU

17:39, 21st August, 2020

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

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);


  Сведения об ответе

crush

18:48, 11th August, 2020

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

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


  Сведения об ответе

VCe znayu

13:38, 5th August, 2020

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

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

1) Вы должны фактически изменить ConfigurationName в 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) и затем также измените значение “contract” во всех связанных app.config (for .dll - е и .exe's) следующим образом:

От:

<endpoint адрес= http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc привязка="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" контракт= " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" имя="WSHttpBinding_ITwoWayAsync">

К:

<endpoint адрес= http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc привязка="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" контракт= " TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" имя="WSHttpBinding_ITwoWayAsync">

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

namespace RCTHipComponents


  Сведения об ответе

repe

11:34, 13th August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться