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

StackOverflow https://stackoverflow.com/questions/24993

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

myServiceClient = new MyServiceClient();

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

System.ServiceModel.ClientBase

Как мне это решить?

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Но, как сказал выше Ричард, мне пришлось полностью уточнить пространство имен.Это немного больно.Ниже именно то, что я изменил.Боль в том, что мне пришлось изменить его в двух местах, одно в ссылке.Таким образом, каждый раз, когда я меняю веб-сервис и делаю «Справочник по обновлению», мне приходится снова вносить изменения в код 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), а затем также измените значение «contract» во всех связанных файлах app.config (для .dll и .exe) следующим образом:

От:

<адрес конечной точки=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcBinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contract = "rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowayasync">

К:

<адрес конечной точки=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contract = "tfbic.rct.hip.components.rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowaysyncyncyncyncyncyncyncyncyncing

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

namespace RCTHipComponents

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top