Ошибка ссылки на службу: не удалось сгенерировать код для ссылки на службу - PullRequest
130 голосов
/ 20 октября 2010

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

Я могу найти веб-службу, используя ее URL, но когдапопробуйте заполнить ссылку на службу. Я получаю следующие ошибки в 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).Я пытался назначить различные разрешения на доступ, но я не совсем уверен, какому пользователю нужно разрешение, или это просто красная сельдь.

Любые идеи будут с благодарностью.

Спасибо

Ответы [ 13 ]

295 голосов
/ 22 августа 2011

Снимите флажок Повторное использование типов во всех ссылочных сборках из опции Настроить ссылку на службу

Проверьте это для подробностей

122 голосов
/ 17 октября 2013

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

Configure Service Reference

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

Reuse Types

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

16 голосов
/ 03 апреля 2013

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

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

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

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

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

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

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

3 голосов
/ 07 марта 2013

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

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

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

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

1 голос
/ 20 октября 2010

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

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

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

0 голосов
/ 06 июля 2018

Перезапуск Visual Studio помог мне.Я использую VS 2015.

0 голосов
/ 05 января 2018

Если вы хотите исправить это, не снимая флажок повторного использования сборки, вот что сработало для меня:

  • Удалите ссылочную сборку, которую хотите использовать повторно
  • Удалить все папки bin проекта
  • Обновить справочник услуг
    • Сохранить "Повторное использование типов в указанных ссылочных сборках"
  • Добавить ссылку на сборку еще раз, чтобы исправить ошибки
  • Обновить справочную службу еще раз
0 голосов
/ 18 мая 2017

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

То, что мне помогло, былоследующее:

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

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

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

0 голосов
/ 13 июня 2016

«Повторное использование типов» не всегда является проблемой при возникновении этой ошибки.

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

0 голосов
/ 22 июля 2015

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

...