Особенности разбора wsdl файлов утилитами Microsoft

277 views
Skip to first unread message

se

unread,
Dec 10, 2015, 11:42:34 PM12/10/15
to dotnetconf

Никак не удается найти нужный набор ключей командной строки при использовании 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-ями.

Max Kvt

unread,
Dec 11, 2015, 12:35:03 AM12/11/15
to dotne...@googlegroups.com
Первая мысль попробовать генерацию через XSD.EXE

11 декабря 2015 г., 9:42 пользователь se <s...@itpc.ru> написал:
> --
>
> ---
> Вы получили это сообщение, поскольку подписаны на группу "dotnetconf".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
> dotnetconf+...@googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.



--
Sincerely,

Max Kilovatiy

Murad Muradov

unread,
Dec 11, 2015, 1:53:31 AM12/11/15
to dotnetconf
Какой аналогичный результат вы хотите получить? svcutil.exe my.wsdl генерирует исходники на C#.

Мурад

se

unread,
Dec 11, 2015, 2:25:24 AM12/11/15
to dotnetconf
Я и хочу получить комплект исходников для взаимодействия с веб сервисами, но на C#, вместо Java. У меня проблема в том, что они не генерируются. Сейчас я еще раз попробую пройти этот путь и приложу сюда список конкретных проблем.

пятница, 11 декабря 2015 г., 11:53:31 UTC+5 пользователь Murad Muradov написал:

Nikita Kilovatiy

unread,
Dec 11, 2015, 2:32:32 AM12/11/15
to dotne...@googlegroups.com
Вот опписание всех опций для svcutil
Если у вас файлы на винте, то нужно указвыать правильный путь до xsd внутри wsdl

--

---
Вы получили это сообщение, поскольку подписаны на группу "dotnetconf".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес dotnetconf+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
С уважением,

Kilovatiy Nikita

se

unread,
Dec 11, 2015, 6:09:01 AM12/11/15
to dotnetconf

Дополнение

Как я пытаюсь трансформировать 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)

se

unread,
Dec 11, 2015, 6:09:29 AM12/11/15
to dotnetconf
Сейчас попробую проделать этот номер с помощью svcutil...

пятница, 11 декабря 2015 г., 12:32:32 UTC+5 пользователь nikson.k написал:

se

unread,
Dec 13, 2015, 11:06:33 PM12/13/15
to dotnetconf
Попробовал разные вариации с wsdl.exe и svcutil.exe, положительного результата получить не удалось. Попробовал подключить к вопросу сообщество русском Stackoverflow  но к сожалению тоже безрезультатно...

Nikita Kilovatiy

unread,
Dec 14, 2015, 1:38:22 AM12/14/15
to dotne...@googlegroups.com
А можно ссылку на wsdl?

2015-12-14 9:06 GMT+05:00 se <s...@itpc.ru>:
Попробовал разные вариации с wsdl.exe и svcutil.exe, положительного результата получить не удалось. Попробовал подключить к вопросу сообщество русском Stackoverflow  но к сожалению тоже безрезультатно...

--

---
Вы получили это сообщение, поскольку подписаны на группу "dotnetconf".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес dotnetconf+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

se

unread,
Dec 14, 2015, 1:53:36 AM12/14/15
to dotnetconf
Заходите на http://dom.gosuslugi.ru/#/regulations 

В разделе "Взаимодействие с внешними системами" находите Регламент и форматы информационного взаимодействия внешних информационных систем с ГИС ЖКХ. Скачиваете его, распаковываете и внутри найдете еще один архив с wsdl-ями.

понедельник, 14 декабря 2015 г., 11:38:22 UTC+5 пользователь nikson.k написал:

Артём Мурадов

unread,
Dec 14, 2015, 1:03:36 PM12/14/15
to dotnetconf
По сути, если задача разовая, можно попробовать сделать это через студию.









понедельник, 14 декабря 2015 г., 11:53:36 UTC+5 пользователь se написал:

Артём Мурадов

unread,
Dec 14, 2015, 1:05:10 PM12/14/15
to dotnetconf
Сгенерированный код потом заберете в нужном файлике



понедельник, 14 декабря 2015 г., 23:03:36 UTC+5 пользователь Артём Мурадов написал:

se

unread,
Dec 14, 2015, 11:57:55 PM12/14/15
to dotnetconf
Изменения в веб сервисах госуслуг анонсируются каждые две недели. Соответственно каждые две недели или может быть чуть реже, надо перестраивать собственный код. Естественно желательно делать это не руками, а каким-нибудь сервисом автоматическим, типа Jenkins-а. 

При создании ServiceReference мы можем в один момент времени обратиться к одному единственному wsdl url-у. Соответственно сгенерируется код у нас для одного единственного веб сервиса. А проблема в том, что сервисов у нас больше одного и все они используют одинаковые базовые типы, которые при генерации нескольких ServiceReference-ов насколько я помню попадут несколько раз в разные пространства имен.

Веб сервисы госуслуг используют шифрование по ГОСТ, то есть чтобы воспользоваться утилитой генерации ServiceReference нам придется на компьютер, который их генерирует, установить какой-нибудь КриптоПро и пачку соответствующих сертификатов.

понедельник, 14 декабря 2015 г., 23:05:10 UTC+5 пользователь Артём Мурадов написал:
Reply all
Reply to author
Forward
0 new messages