У меня есть решение для службы Windows, и я пытаюсь добавить ссылку на веб-службу Hermes (сервер сообщений 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). Я пробовал назначать различные разрешения доступа, но я не совсем уверен, кому из пользователей требуется разрешение, или это просто отвлекающий маневр.
Любые идеи очень приветствуются.
Спасибо
источник
Щелкните правой кнопкой мыши ссылку на службу и выберите
Configure Service Reference...
Затем снимите флажок
Reuse types in referenced assemblies
Щелкните
OK
, очистите и перестройте свое решение.источник
Я также столкнулся с аналогичной ошибкой при попытке сгенерировать клиента для веб-службы из проекта ASP .Net MVC 4.0 с помощью Visual Studio 2012.
Корень проблемы, по-видимому, заключается в том, что проект, из которого я пытался создать клиента, ссылался на сборку, которая, в свою очередь, зависела от другой сборки, на которую также не ссылались.
Когда в конфигурации службы включен параметр «Повторное использование типов в сборках, на которые имеются ссылки», генератор службы, вероятно, проверяет все сборки, на которые имеются ссылки, чтобы получить список типов, которые можно использовать повторно. Тот факт, что одна из указанных сборок ссылается на другую сборку, которая недоступна, вероятно, вызывает сбой генератора.
Снятие флажка «Повторное использование типов в ссылочных сборках» в конфигурациях службы решит указанную выше проблему , но имеет побочный эффект. Параметр повторного использования типов существует не просто так, и в некоторых случаях он позволяет избежать ненужного приведения в коде, потребляющем службу.
Например, если сама служба построена с использованием WCF и некоторые параметры методов внутри нее имеют тип System.Guid, они будут преобразованы в строки в созданном клиенте, если параметр типов повторного использования отключен.
Альтернативой, которую я предпочитаю отключать повторное использование типов, является добавление ссылки на службу из проекта библиотеки классов, специально созданного для этой цели. Единственное, о чем следует помнить, - это скопировать все конфигурации, связанные с сервисом, из app.config библиотеки классов в файл конфигурации запускаемого проекта.
Если в локальных сборках определены типы, которые необходимо повторно использовать в клиенте службы, на эти сборки просто нужно ссылаться из вышеупомянутого проекта библиотеки классов вместе со всеми их зависимостями.
источник
http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647
Благодаря статье выше.
В моем случае у меня есть эта проблема с моим проектом WPF в VS.Net 2008. После прочтения этой статьи я понял, что сборка, используемая в веб-службе, является другой версией сборки, используемой на клиенте.
Он отлично работает после обновления сборки на клиенте.
источник
Было бы чрезвычайно сложно угадать проблему, поскольку она вызвана ошибкой в WSDL, и без изучения WSDL я не могу больше комментировать. Так что, если вы можете поделиться своим WSDL, сделайте это.
Все, что я могу сказать, это то, что, похоже, в WSDL отсутствует схема (с целевым пространством имен 'http://service.ebms.edi.cecid.hku.hk/'). Я знаю о проблемах и различном обращении со схемой, когда инструкции включения игнорируются.
В общем, я считаю, что реализация веб-сервисов Microsoft довольно хороша, поэтому я думаю, что веб-сервис отправляет хитроумный WSDL.
источник
Я получаю ту же ошибку в Silverlight 5 (VS2012)
Вы также можете удалить ссылки на:
После обновления ссылок на службы не забудьте добавить их обратно.
источник
Как указано выше, возможны несколько различных проблем. Мы обнаружили, что .DLL для библиотеки WCF был добавлен в качестве ссылки на клиентский проект. Это, в свою очередь, создавало проблемы с разрешением объектов и, таким образом, приводило к «опустошению» файлов на этапах генерации кода. Хотя снятие отметки с использования «Типы повторного использования ...» может показаться ответом, он создает дополнительные определения типов объектов, которые являются прокси к реальным типам, в новом пространстве имен, что затем вызывает всевозможные проблемы «совместимости» с использование этих типов. Только если вы действительно хотите «скрыть» тип, вы должны отметить эту опцию.
Скрытие типа было бы целесообразно, если вы не хотите, чтобы зависимость типа «DLL» «просачивалась» в проект, который вы пытаетесь отделить от другого. Если DLL для проекта библиотеки WCF проникает в ссылки клиентского проекта, у вас будет эта проблема со всеми видами странных побочных эффектов, поскольку определения типов также находятся в DLL.
источник
столкнуться с той же проблемой, решенной путем запуска Visual Studio в режиме администратора
источник
Я столкнулся с этой проблемой при обновлении решения VS2010 WCF + Silverlight в VS2015 Professional . Помимо автоматического обновления Silverlight 4 до Silverlight 5, было изменено значение флажка повторного использования ссылки на службу, и создание не удалось.
источник
«Типы повторного использования» не всегда являются проблемой при возникновении этой ошибки.
При добавлении ссылки на более старую службу щелкните «Дополнительно» и выберите «Добавить веб-ссылку». Теперь сделайте ссылку на ваш wsdl, и все должно работать.
источник
Если вы хотите исправить это, не снимая флажок повторного использования сборки, у меня сработало следующее:
источник
Перезапуск Visual Studio помог мне. Я использую VS 2015.
источник
У меня возникла эта проблема при попытке обновить ссылку на мою службу (ошибка появляется только при добавлении ссылки на службу), но я не хотел снимать флажок повторного использования сборки.
То, что работало для меня, было следующим:
Вуаля, теперь он действительно обновляется и больше не пытается удалить весь мой сгенерированный код.
Я был почти готов отказаться от функции повторного использования типов ...
РЕДАКТИРОВАТЬ: также убедитесь, что конфигурация сборки - AnyCPU или x86, поскольку svcutil ошибается с x64.
Голосующему против: извините, если это не сработало для вас, я даже не знаю, почему это сработало для меня, но это сработало. Возможно, в тот раз я сделал что-то еще, что устранило проблему, но сейчас нет возможности узнать.
источник