Ошибка ссылки на службу: не удалось сгенерировать код для ссылки на службу

У меня есть решение для Windows Service, и я пытаюсь добавить ссылку на службу на веб-службу Hermes (Opensource ebms message Server) в VS2010.

Я могу найти веб-сервис, используя его URL-адрес, но когда я пытаюсь заполнить ссылку Service, я получаю следующие ошибки в Visual Studio:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Некоторое исследование показало, что это связано с тем, что svcutil.exe не смог построить прокси из-за отсутствия прав доступа к каталогу (возможно, c:\windows\temp). Я попытался назначить различные разрешения доступа, но я не уверен, какой пользователь нуждается в разрешении, или если это просто красная селедка.

Будем очень благодарны за любые идеи.

Спасибо

Ответ 1

Необходимо отключить типы повторного использования во всех ссылочных ассемблерах из опции "Настройка служебной ссылки"

Проверьте это для деталей

Ответ 2

Щелкните правой кнопкой мыши ссылку на свою службу и выберите Configure Service Reference...

Configure Service Reference

Затем снимите флажок Reuse types in referenced assemblies

Reuse Types

Нажмите OK, очистите и перестройте свое решение.

Ответ 3

Я также столкнулся с аналогичной ошибкой при попытке создания клиента для веб-службы из проекта ASP.Net MVC 4.0 с использованием Visual Studio 2012.

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

Когда в конфигурации службы включено "Типы повторного использования в ссылочных сборках", генератор службы, вероятно, проверяет все ссылочные сборки, чтобы получить список типов, которые могут быть повторно использованы. Тот факт, что одна из ссылочных сборок ссылается на другую сборку, которая недоступна, вероятно, приводит к сбою генератора.

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

Например, если сама служба построена с использованием WCF, а некоторые параметры метода внутри нее имеют тип System.Guid, они будут переведены в строки в сгенерированном клиенте, если опция типов повторного использования отключена.

Альтернативой, которую я предпочитаю, чтобы отключить повторное использование типов, является добавление ссылки на службу из проекта библиотеки классов, специально созданного для этой цели. Единственное, что нужно иметь в виду - скопировать все связанные с сервисом конфигурации из библиотеки классов app.config в файл конфигурации проекта запуска.

Если существуют типы, определенные в локальных сборках, которые необходимо повторно использовать в клиенте службы, эти сборки просто нужно ссылаться на вышеупомянутый проект библиотеки классов вместе со всеми их зависимостями.

Ответ 4

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

Благодаря вышеприведенной статье.

В моем случае у меня есть эта проблема с моим проектом WPF в VS.Net 2008. После прохождения этой статьи я понял, что сборка, используемая в веб-службе, представляет собой другую версию сборки, используемую на клиенте.

Он отлично работает после обновления сборки на клиенте.

Ответ 5

Было бы очень сложно угадать проблему, поскольку это связано с ошибкой в ​​WSDL и без изучения WSDL, я не могу комментировать многое другое. Поэтому, если вы можете поделиться своим WSDL, сделайте это.

Все, что я могу сказать, заключается в том, что в WSDL отсутствует видимая схема (с целевым пространством имен "http://service.ebms.edi.cecid.hku.hk/" ). Я знаю о проблемах и различной обработке схемы, когда включены инструкции, игнорируются.

Вообще-то я нашел, что реализация веб-сервисов Microsoft довольно хороша, поэтому я думаю, что веб-служба отправляет обратно изворотливый WSDL.

Ответ 6

Я получаю ту же ошибку в Silverlight 5 (VS2012)

Вы также можете удалить ссылки на:

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

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

Ответ 7

Как указано выше, существует несколько различных проблем. Мы обнаружили, что DLL для библиотеки WCF был добавлен в качестве ссылки на проект клиента. Это, в свою очередь, создавало проблемы с разрешением объектов и тем самым приводило к "опорожнению" файлов с помощью шагов генерации кода. Хотя снятие флажка "Повторное использование типов..." может показаться ответом, оно создает дополнительные определения типов объектов, которые являются прокси-серверами для реальных типов, в новом пространстве имен, что затем вызывает всевозможные проблемы "совместимости" с использование этих типов. Только если вы действительно хотите "скрыть" тип, если вы проверите эту опцию.

Скрытие типа было бы подходящим, если вы не хотите, чтобы зависимость типа "DLL" "просачивалась" в проект, который вы пытаетесь изолировать от другого. Если DLL для проекта библиотеки WCF проникает в ссылки на проект клиента, у вас будет эта проблема со всеми видами странных побочных эффектов, поскольку определения типов также находятся в DLL.

Ответ 8

сталкивается с той же проблемой, разрешенная при запуске Visual Studio в режиме администратора

Ответ 9

Я столкнулся с этой проблемой, когда обновил решение VS2010 WCF + Silverlight в VS2015 Professional. Помимо автоматического обновления от Silverlight 4 до Silverlight 5, значение флажка повторного использования ссылки на обслуживание было изменено, а генерация завершилась неудачно.

Ответ 10

"Типы повторного использования" не всегда являются проблемой при возникновении этой ошибки.

При добавлении ссылки на более старую службу нажмите "расширенный" и "Добавить веб-ссылку". Теперь ссылка на ваш wsdl и все должно работать.

Ответ 11

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

Что сработало для меня, было следующее:

  • Удалить ссылочную сборку, которую я хотел повторно использовать
  • Обновить ссылку на службу
    • Сохранять "Типы повторного использования в указанных ссылочных сборках"
    • Игнорировать ошибки, потому что ссылка отсутствует!
  • Добавьте ссылку на сборку снова, чтобы исправить ошибки.
  • Обновить ссылку на службу снова

Voila, теперь он фактически обновляется и больше не пытается удалить весь мой сгенерированный код.

Я был почти готов отказаться от функции повторного использования...