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

Я добавил прокси-сервер к веб-сервису для решения VS2008 / .NET 3.5. При построении клиента .NET выбрасывает эту ошибку:

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

Поиск этой ошибки говорит мне использовать полное пространство имен в контракте. Вот мой app.config с полным пространством имен:

   

Я использую XP local (я упоминаю об этом, потому что ряд хитов Google упоминает win2k3). Файл app.config копируется в app.exe.config, так что это тоже не проблема.

Любые подсказки?

«Эта ошибка может возникнуть, если вы вызываете службу в библиотеке classов и вызываете библиотеку classов из другого проекта».

В этом случае вам нужно будет включить настройки конфигурации WS в основные проекты app.config, если это winapp или web.config, если это веб-приложение. Это способ пойти даже с PRISM и WPF / Silverlight.

Испытав несколько вариантов, я, наконец, решил это, используя

Контракт «IMySOAPWebService»

т.е. без полного пространства имен в конфиге. По какой-то причине полное имя не разрешалось должным образом

Я решил это (я думаю, как могли предположить другие), создав сам экземпляр привязки и конечных адресов – потому что я не хотел добавлять новые настройки в файлы конфигурации (это замена некоторого существующего библиотечного кода, который широко используется, и ранее использовали более старую ссылку на веб-службу и т. д.), и поэтому я хотел иметь возможность отказаться от нее, не добавляя новые настройки конфигурации везде.

 var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl); using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress)) { //set timeout productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout); //call web service method productResponse = productService.GetProducts(); } 

редактировать

Если вы используете https, вам нужно использовать BasicHttpsBinding а не BasicHttpBinding .

У меня была такая же проблема. Оказывается, для web REFERENCE вам нужно указать URL-адрес в качестве первого параметра для конструктора:

 new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx"); 

Для новой версии веб-службы SERVICE REFERENCE вы должны указать имя, которое относится к записи конечной точки в конфигурации:

 new WebService.WebServiceSoapClient("WebServiceEndpoint"); 

С соответствующей записью в Web.config или App.config :

     

Довольно чертовски трудно удалить туннельное видение на «он работал в старой программе» …

У меня была такая ситуация, когда у меня была

  • Служба WCF, размещенная где-то
  • Основной проект
  • Потребительский проект типа «Библиотека classов», который имеет ссылку на службу WCF
  • Основной проект вызывает методы из потребительского проекта

Теперь у проекта Consumer был все связанный с ним параметр конфигурации в моего app.config, он все еще выдавал ту же ошибку, что и выше.

Все, что я сделал, добавили тот же тег в файл app.config моего основного проекта, и, наконец, мы были хороши.

Реальная проблема, насколько это было в моем случае, это чтение неправильного файла конфигурации. Вместо app.config для потребителя он ссылался на конфигурацию основного proj. мне потребовалось два часа, чтобы понять это.

«Эта ошибка может возникнуть, если вы вызываете службу в библиотеке classов и вызываете библиотеку classов из другого проекта».

«В этом случае вам нужно будет включить настройки конфигурации WS в основные проекты app.config, если это winapp или web.config, если это веб-приложение. Это способ пойти даже с PRISM и WPF / Silverlight».

Да, но если вы не можете изменить основной проект (например, Orchard CMS), вы можете сохранить конфигурацию службы WCF в своем проекте.

Вам необходимо создать вспомогательный сервис с методом генерации клиента:

 public static class ServiceClientHelper { public static T GetClient(string moduleName) where T : IClientChannel { var channelType = typeof(T); var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace); var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute; if (contractAttribute == null) throw new Exception("contractAttribute not configured"); //path to your lib app.config (mark as "Copy Always" in properties) var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None); var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration); if (serviceModelSectionGroup == null) throw new Exception("serviceModelSectionGroup not configured"); var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType().First(e => e.Contract == contractAttribute.ConfigurationName); var channelFactory = new ConfigurationChannelFactory(endpoint.Name, configuration, null); var client = channelFactory.CreateChannel(); return client; } } 

и использовать его:

 using (var client = ServiceClientHelper.GetClient(yourLibName)) { ... get data from service ... } 

Подробнее см. В этой статье .

Это меня сбило с ума.

Я использую Silverlight 3 Prism (CAB) с WCF

Когда я вызываю службу WCF в модуле Prism, я получаю ту же ошибку:

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

Оказывается, что он ищет в файле .xap Shell для файла ServiceReferences.ClientConfig, а не в файле ServiceReferences.ClientConfig модуля. Я добавил свою конечную точку и привязку к существующему файлу ServiceReferences.ClientConfig в приложении Silverlight Shell (он называет его собственными службами WCF).

Затем мне пришлось перестроить приложение Shell, чтобы сгенерировать новый .xap-файл для моей клиентской папки веб-проекта.

Теперь эта строка кода работает:

 MyServiceClient myService = new MyServiceClient(); 

Я получал эту ошибку в приложении ASP.NET, где WCF-служба была добавлена ​​в библиотеку classов, которая добавляется в приложение ASP.NET в качестве файла DLL с ссылкой .dll в папке bin. Чтобы устранить эту ошибку, параметры конфигурации в файле app.config в библиотеке classов, ссылающиеся на службу WCF, необходимо скопировать в настройки web.config для сайта / приложения ASP.NET.

Я обнаружил (а также копирование в App.config клиентского интерфейса UI, когда я использовал интерфейс библиотеки classов). Мне пришлось префикс имени привязки с именем Service Reference ( ServiceReference is ServiceReference в ниже).

например:

  

вместо генерируемого по умолчанию:

  

У меня была та же проблема, но изменение пространства имен контрактов не сработало для меня. Поэтому я попробовал веб-ссылку типа .Net 2 вместо справочной ссылки .Net 3.5. Это сработало.

Чтобы использовать веб-ссылку в Visual Studio 2008, нажмите «Добавить ссылку на службу», затем нажмите «Дополнительно», когда появится диалоговое окно. В этом случае вы найдете вариант, который позволит вам использовать веб-ссылку вместо ссылки на службу.

Несколько ответов здесь затрагивают правильное решение, когда вы сталкиваетесь с неясно скрывающейся ошибкой ссылки на службу из файла classа: скопируйте конфигурационную информацию в свой app.config web.config вашего консольного приложения или приложения Windows. Ни один из этих ответов не показывает вам, что копировать. Попробуем исправить это.

Вот что я скопировал из файла конфигурации библиотеки classов в конфигурационный файл консольного приложения, чтобы обойти эту сумасшедшую ошибку для службы, которую я пишу, называемой «TranslationServiceOutbound».

Вы в основном хотите все внутри системы. ServiceModel :

           

Это может привести к тестированию небиблиотечного приложения, которое потребляет услугу.

Информация, которую другие пользователи указали, является основной причиной этого. Если вы пытаетесь написать автоматические тестовые примеры, и тестируемый модуль фактически вызовет интерфейс службы, вам необходимо добавить ссылку на службу в тестовый проект. Это вкус приложения, использующего тип ошибки библиотеки. Я не сразу это понял, потому что мой код, который использует интерфейс , не находится в библиотеке . Однако, когда тест действительно выполняется, он будет запускаться из тестовой сборки, а не с тестируемой сборки.

При добавлении ссылки на службу в проект тестирования модуля была решена моя проблема.

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

Однажды я столкнулся с этой проблемой. Это связано с тем, что я все еще разрабатывал интерфейс, который использует службу WCF. Я настроил тестовое приложение и продолжил разработку. Затем в процессе разработки я изменил некоторые пространства имен служб. Поэтому я дважды проверял «system.serviceModel -> client -> endpoint -> contract» в web.config для соответствия classу WCF. Тогда проблема решена.

Пространство имен в вашем конфиге должно отражать остальную часть пути пространства имен после пространства имен по умолчанию вашего клиента (как указано в свойствах проекта). Основываясь на вашем ответе, я предполагаю, что ваш клиент настроен на использование в пространстве имен Fusion.DataExchange.Workflows. Если вы переместили код клиента в другое пространство имен, вам нужно будет обновить конфигурацию, чтобы соответствовать оставшемуся пути пространства имен.

Просто для кого-то другого с той же проблемой; Я написал модульный тест для моего метода, который пытался подключиться к моей службе. С этим единственным исключением это случалось каждый раз – я понятия не имею, почему. Когда я запускал его из winform, он отлично работает.

У меня есть одна и та же проблема. Я использовал службу WCF в библиотеке classов и вызываю библиотеку classов из windows Application project.but, я Forget Change В файле конфигурации приложения Windows. Проектируйте те же файла приложения Console.
Решение: измените конфигурацию внешнего проекта так же, как и конфигурацию wcf библиотеки classов.

Если вы ссылаетесь на веб-службу в своей библиотеке classов, вам необходимо скопировать app.config в приложение Windows или консольное приложение

Решение: измените конфигурацию внешнего проекта так же, как и конфигурацию wcf библиотеки classов.

Работал для меня

Привет, я столкнулся с одной и той же проблемой, но лучшим решением является позволить .NET настроить конфигурацию на стороне клиента. Я обнаружил это, когда добавляю ссылку на службу с строкой запроса http: /namespace/service.svc? Wsdl = wsdl0, она НЕ создает конечные точки конфигурации на стороне клиента. Но когда я удаляю wsdl-wsdl0 и использую только URL http: /namespace/service.svc, он создает конфигурацию конечной точки в файле конфигурации клиента. для короткого remoe «WSDL = WSDL0».

Не ставьте строку объявления клиента службы как поле classа, а не создавайте экземпляр для каждого используемого метода. Поэтому проблема будет устранена. Если вы создаете экземпляр клиента службы как поле classа, тогда возникает ошибка времени разработки!

В случае, если вы используете приложение WPF с использованием инфраструктуры PRISM, тогда конфигурация должна существовать в вашем проекте запуска (т. Е. В проекте, где находится ваш загрузочный файл).

Эта ошибка может возникнуть, если вы вызываете службу в библиотеке classов и вызываете библиотеку classов из другого проекта.

Кажется, есть несколько способов создать / исправить эту проблему. Для меня продукт CRM, который я использую, был написан в собственном коде и способен вызвать мою .NET-библиотеку, но я нахожусь в информации о конфигурации, которая должна быть в / над основным приложением. Для меня CRM-приложение не является .NET, поэтому мне пришлось поместить его в файл machine.config (а не там, где я его хочу). Кроме того, поскольку моя компания использует Websense, мне пришлось нелегко даже добавить ссылку на службу из-за ошибки 407 Proxy Authentication Required, требующей изменения для machine.cong.

Решение прокси:

Чтобы получить ссылку на службу WCF для работы, мне пришлось скопировать информацию из app.config моей DLL в основную конфигурацию приложения (но для меня это был machine.config). И мне также пришлось скопировать информацию о конечной точке в тот же файл. Как только я это сделал, он начал работать для меня.

ОК. Мой случай был немного отличным, но, наконец, я нашел исправление для него: у меня есть Console.EXE -> DLL -> Invoking WS1 -> DLL -> Invoking WS2

Как было рекомендовано, у меня были как конфигурации сервисной модели WS1, так и WS2 в Console.EXE.config. – не разрешил проблему.

Но это все еще не сработало, пока я не добавлю WebReference WS2 к WS1, а также не только к DLL, которая фактически создает и вызывает прокси WS2.

У меня была такая же проблема
Я использовал настольное приложение и использовал веб-службу Global Weather Web

Я удалил ссылку на службу и добавил веб-ссылку и проблему решена Спасибо

Решение для меня состояло в том, чтобы удалить имя конечной точки из атрибута Endpoint Name в клиенте web.config, это позволило прокси использовать

 ChannelFactory _channelFactory = new ChannelFactory(""); 

только весь день работал. Кроме того, название контракта было неправильным, как только это исправление было на месте, хотя оно было неправильным, когда появилась первоначальная ошибка. Двойной, а затем тройной чек для имени подрядчика! Отчество: Ян

Позвольте мне добавить еще одну вещь, которую нужно искать. (Ответ Тома Хейга уже намекает на это, но я хочу быть явным)

Мой файл web.config имеет следующие значения:

    

Я уже использовал basicHttpsBinding для одной ссылки, но затем добавил новую ссылку, требующую basicHttpBinding (no s). Все, что мне нужно было сделать, это добавить к моему protocolMapping следующее:

     

Как правильно указывает LR , это необходимо определить в нужных местах. Для меня это означало один в app.config проекта Unit Test, а также один в web.config основного проекта службы.

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

т.е.

  

работает, но

  

дает сообщение «Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт».

Сборка, содержащая MyNamepsace.IMyContract, находится в другой сборке для основного приложения, поэтому это может объяснить необходимость использования разрешения глобальной области.

У меня такая же ошибка, и я пробовал кое-что, но не работал, чем заметил, что мой «контракт» был не таким же для целых проектов, я изменил контракт, как это было бы для всех проектов внутри решения, и чем это сработало. Это проект A

    

Проект B:

    

Наконец, я изменил для обоих:

    

Когда вы добавляете ссылку на службу

введите описание изображения здесь

остерегайтесь пространства имен, которое вы вводите:

введите описание изображения здесь

Вы должны добавить его к имени вашего интерфейса:

    
Давайте будем гением компьютера.