Никак не удается найти нужный набор ключей командной строки при использовании Microsoft-ских утилит wsdl.exe и svcutil.exe. Задача тривиальная, разобрать комплект .wsdl и .xsd файлов и сгенерировать для них набор исходных файлов на C#, содержащих код, описывающий интерфейсы взаимодействия и типы данных, которые можно использовать при работе с удаленным веб сервисом.
Используя утилиту wsimport из JDK, проблема решается очень легко и я могу получить набор исходников, а могу даже получить сразу упакованную в jar библиотеку используя к примеру вот такой сценарий shell:
#!/bin/sh
rm -rf build/*
rm -rf src/*
rm -rf bin/GisWsServices.jar
for item in `ls -1 wsdls/*.wsdl`
do
echo ""
echo "Begin processing $item file..."
wsimport -XadditionalHeaders -extension -s src -d build $item
echo ""
done
echo "Make jar library..."
echo "..."
cd build
jar cf ../bin/GisWsServices.jar ru org
Ключевая строка в этом сценарии начинается словом "wsimport". Для Microsoft-ских утилит не удалось подобрать аналога именно этой строки, чтобы получить аналогичный результат, но исходники на C#. Комплект wsdl файлов можно к примеру взять с портала Госуслуг ГИС ЖКХ (dom.gosuslugi.ru) из раздела Регламенты и инструкции, файл там обычно называется Регламенты и форматы информационного взаимодействия внешних информационных систем. Внутри этого архива есть еще один архив с wsdl-ями.
--
---
Вы получили это сообщение, поскольку подписаны на группу "dotnetconf".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес dotnetconf+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
Дополнение
Как я пытаюсь трансформировать wsdl описания в исходный код на C# и что в результате мне не нравится? В простейшем виде я буквально пытаюсь выполнить сценарий командной строки Windows вот такого содержания:
for /r %i in (7.1.0.2\*.wsdl) do wsdl /out:src /sharetypes File:///%i
В ответ, частично, вместо исходников на C# я получаю вот такие сообщения об ошибках:
Error: Не удается импортировать привязку "NsiBinding" из пространства имен "http ://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi-service/". - Не удается импортировать операцию "importMunicipalServices". - Ссылка на объект не указывает на экземпляр объекта.
С помощью кода тех исходников, которые у меня все же генерируются, я не могу отправлять запросы веб сервисам, потому что сигнатуры сгенерированных методов получаются урезанные, и сформировать правильный запрос невозможно. Например сигнатура метода на Java выглядит так:
public ExportOrgRegistryResult exportOrgRegistry(
ExportOrgRegistryRequest exportOrgRegistryRequest,
ISRequestHeader header,
Holder<ResultHeader> header0)
А сигнатура того же самого метода на C# выглядит так:
public exportOrgRegistryResult exportOrgRegistry(
exportOrgRegistryRequest exportOrgRegistryRequest)
Попробовал разные вариации с wsdl.exe и svcutil.exe, положительного результата получить не удалось. Попробовал подключить к вопросу сообщество русском Stackoverflow но к сожалению тоже безрезультатно...
--
---
Вы получили это сообщение, поскольку подписаны на группу "dotnetconf".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес dotnetconf+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.