Генерация клиентского кода с использованием svcutil
Я пытаюсь сгенерировать код прокси клиента с помощью инструмента svcutil.exe. И это бросает следующую ошибку.
Я использую следующую команду.
svcutil /namespace:http://www.starstandard.org/STAR/5,* /out:STARContract.cs / noConfig SendOrderOrder.wsdl SendOrderOrderType.xsd
--------------------Выход ----------------------
Ошибка: при проверке некоторых схем XML, сгенерированных во время экспорта, произошла ошибка: элемент "http://www.starstandard.org/STAR/5:SendOrder" не объявлен.
Ошибка: невозможно импортировать wsdl:portType. Подробно: Возникла исключительная ситуация при выполнении расширения импорта WSDL: System.ServiceModel.Descripti on.XmlSerializerMessageContractImporter Ошибка: элемент "http://www.starstandard.org/STAR/5:SendOrder" отсутствует. XPath to Error Источник: //wsdl:definitions[@targetNamespace='http://www.starstandards.org/webservices /2005/10/transport/bindings']/wsdl:portType[@name='starTransportPortTypes']
Ошибка: Невозможно импортировать wsdl:binding. Подробно: Произошла ошибка при импорте wsdl:portType, от которой зависит wsdl:binding. XPath к wsdl:portType: //wsdl:definitions[@targetNamespace='http://www.starstandards.org/webservice s/2005/10/transport/bindings']/wsdl:portType[@name='starTransportPortTypes'] XPath to Error Источник: //wsdl:definitions[@targetNamespace='http://www.starstandards.org/webservices /2005/10/transport/bindings']/wsdl:binding[@name='starTransport']
Ошибка: Невозможно импортировать wsdl: порт. Подробно: Произошла ошибка при импорте привязки wsdl:, от которой зависит порт wsdl:. XPath для wsdl:binding: //wsdl:definitions[@targetNamespace='http://www.starstandards.org/webservices /2005/10/transport/bindings']/wsdl:binding[@name='starTransport'] XPath Ошибка Источник: //wsdl:definitions[@targetNamespace='http://www.starstandards.org/webservices /2005/10/transport/bindings']/wsdl:service[@name='SendOrderWebService']/wsdl: порт [@ имя ='SendOrderStarTransport']
Генерация файлов... Предупреждение: код не был создан. Если вы пытались сгенерировать клиента, это может быть связано с тем, что документы метаданных не содержали никаких действительных контрактов или услуг, или потому что все контракты / услуги были обнаружены в / справочных сборках. Убедитесь, что вы передали все документы метаданных в инструмент.
Предупреждение. Если вы хотите создавать контракты данных из схем, обязательно используйте параметр /dataContrac tOnly.
--------- Конец вывода -----------------
Относительные ссылки на файлы выглядят нормально.
Когда я пытаюсь создать тот же код с помощью WSE, он работает нормально и генерирует относительный прокси-класс без каких-либо ошибок. Однако это не работает при использовании svcutil.exe.
Любая идея?
1 ответ
Я не знаком с WSDL/XSD, на которые вы ссылаетесь, поэтому я не могу объяснить особенности, почему это не удается.
Однако, на мой взгляд, аспекты генерации кода инструментов.Net wsdl и xsd давно сломаны. Они не справляются со многими стандартными отраслевыми соглашениями (включая обработку конструкций AttributeGroup, принудительное использование пространств имен для включений, плохую обработку обрабатываемых элементов, и этот список можно продолжить).
Если в ваших файлах WSDL/XSD используются операторы import и / или include, то.Net, вероятно, захлебнется. У меня был ряд случаев, когда такие инструменты, как SOAPUI, правильно обрабатывали WSDL и могли генерировать различные артефакты, но.Net не справлялся.
Некоторые люди имели некоторый успех с инструментом под названием WSCF Blue, но, к сожалению, я обычно выравнивал / приводил в порядок файл WSDL/XSD вручную, пока.Net не справится с этим.