Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/204: Рейтинг темы: голосов - 204, средняя оценка - 4.84
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
1
.NET 4.x

Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel

06.04.2017, 22:27. Просмотров 39889. Ответов 229


Решил создать отдельную тему, так как в теме Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4) - C# WCF уже можно заблудиться.

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

За прошедший год с момента начала использования Крипто .NET у меня к нему накопился ряд претензий, таких как:
1. Работа только с одним, своим, криптопровайдером
2. Навязчивая загрузка во все приложения, даже туда, где он не нужен
Как следствие, это приводит к невозможности использования ряда приложений, таких как, например, NUnit Framework


Не хочу сказать ничего плохого в адрес разработчиков КриптоКом.
Они и сами признают на своем форуме, что внедрение чужеродных алгоритмов шифрования в операционные системы Windows это очень непростая задача.
Но все-таки в результате Крипто .NET получился, по моему опыту, настолько глючным, что пользоваться им в работе становится весьма обременительным.

Предлагаемая кукла обеспечивает работу с ГИС ЖКХ без настоятельно навязываемых Ланитом продуктов КриптоКом, таких как stunnel и Крипто .NET.
Для работы используются стандартные вызовы CryptoAPI, так что криптопровайдера установить придется,
соответствующего полученному в УЦ ключу, CryptoPro CSP или ViPNet CSP.

Что было сделано:
1. За основу была взята реализация springjazzy (https://github.com/springjazzy/Xades) выложенная с составе примера начального уровня выложенного Anvano. Учтены/приняты во внимание замечания других участников форума
2. Была написана обертка для работы с CryptoAPI (с использованием найденного куска от Microsoft), в ней был выделен интерфейс ICryptoProvider декларирующий минимально необходимый функционал для подписи
3. Реализация springjazzy из пункта 1 была подвергнута переработке в следующих направлениях:
3.1. Был выкинут весь неиспользуемый функционал класса XadesSignedXml для облегчения чтения и понимания, что там вообще происходит
3.2. Последовательным движением в глубину текстов библиотеки Xades и замены рефлексии методов .NET на куски текста Microsoft удалось избавить класс XadesSignedXml от
криптографии .NET. Вызовы криптографии .NET были заменены на вызовы трех методов ICryptoProvider из п.2

Таким образом, сейчас подпись Xades в данном приложении осуществляется следующим образом:

C#
1
2
ICryptoProvider CryptoProvider = GetCryptoProvider(SigningSertificate);
signedXml.ComputeSignature(CryptoProvider.ComputeHash, CryptoProvider.ComputeSignature, CryptoProvider.ReverseSignature);
где:
  • signedXml - экземпляр класса XadesSignedXml из модифицированной библиотеки
  • ComputeHash - функция расчета хэша вида byte[] ComputeHash(byte[] Data)
  • ComputeSignature - функция расчета подписи вида byte[] ComputeSignature(byte[] Data)
  • ReverseSignature - свойство типа bool, показывающее библиотеке, нужно ли переворачивать полученную подпись:8 Выяснилась занятная деталь: Крипто .NET и CryptoPro CSP оба выдают верные подписи (для одного и того же сертификата), но одну из них нужно зеркально перевернуть, чтобы ее принял ГИС ЖКХ. Почему там сделано - не знаю, это наверное можно спросить в КриптоКом

  • Кукла проверена на машине где установлен как Крипто .NET так и CryptoPro CSP
  • После чего Крипто .NET был удален
  • Компьютер был перезагружен для завершения удаления (два раза, так как с первого раза Крипто .NET удаляться не захотел)
  • После этого осталась работоспособной только часть, работающая через CryptoApi

С ключами Инфотекса у меня в настоящее время возможности проверить работоспособность нет, так как тестовый ключ Инфотекса уже не рабочий.

У кого есть возможность проверить, просьба сообщить о результатах.

Из имеющихся в настоящий момент не исправленных глюков - ошибка связанная с некорректным освобождением памяти при выходе при приложения. Подозреваю, что ошибка где-то в обертке CryptoAPI, но где - пока непонятно.


В прилагаемом архиве исходные тексты куклы и релизная сборка приложения.

Отзывы и конструктивная критика принимаются.

С уважением к участникам форума,
hhmm

Дополнение от 18.10.2018:

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

1. gizmo23 предложил свой вариант библиотеки.
В основу был взят тот же проект signature-demo-net. Все ссылки в сообщении.
Первоначальное обсуждение продолжалось до post10628102

2. umatkot предложил утилиту для проверки работоспособности сервера ГИС ЖКХ. Утилита (по словам автора) использует еще более усовершенствованную версию библиотеки подписи.

3. Дополнение на тему альтернативных криптопровайдеров: месяц назад один из клиентов предоставил на опыты реальный, не тестовый ключ, ViPNet CSP выданный настоящим удостоверяющим центром. Попытка прикрутить провайдера ViPNet CSP к ГИС ЖКХ успехом не увенчалась. Несмотря на то, что на машину удалось установить два криптопровайдера одновременно и каждый из них отдельно видел и успешно читал свои ключи, попытка подключиться с ключом ViPNet CSP к ППАК ГИС ЖКХ не удалась. Проблемы возникли на транспортном уровне, такие же какие бывают у Крипто .Net клиент когда обновляется .Net Framework - 'Unable establish secure SSL/TLS channel to api.dom.dosuslugi.ru'. До подписи дело не дошло.
То ли там что-то еще нужно докупать у Инфотекса, то ли ViPNet CSP не может внедриться на транспортном уровне. В общем, у меня не получилось. Потратил один день, после чего эксперименты прекратил.

Дополнение от 24.01.2018:

4. vst377 предложил набор классов реализующих работу в ГИС ЖКХ файловых сервисов.
11
Вложения
Тип файла: zip GisBusted.zip (4.17 Мб, 288 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 22:27
Ответы с готовыми решениями:

.NET 4.x Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (2)
Начало темы здесь: https://www.cyberforum.ru/web-services-wcf/thread1615223.html umatkot, Да, к...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1800721.html Здравствуйте....

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (5)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1840159.html И так мы Я и...

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (3)
Предыдущая тема: https://www.cyberforum.ru/web-services-wcf/thread1776736.html Кто нибудь знает...

229
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
16.10.2017, 09:35 61
vst377, у меня на работе проксик не даёт выложить файл. В кукле ланита используется много чего, что уже давно изменено и усовершенствовано и на продуктовых системах этих Exception не вылетает.
Я чуть позже выложу этот файл и сами можете глянуть, как там устроена подпись.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
16.10.2017, 11:27 62
Недавно на сервере ППАК (сегодня) при экспорте дома, ГИС стала выдавать непонятно что.

WebRequestHandler десериализатора XML ругался на то, что в корневом элементе XML найдено что-то, что мешает десериализации.



Для того, чтобы понять точно, что приходит с ГИС была сделана "голая кукла Ланит", которая имеет в себе только функционал отправки запроса по XML шаблону и подписи его без КриптоПро.NET и КриптоКом "радиотунеллей". В алгоритме подписи был использован функционал подписи GostCryptography.



Эта программа не является ничем иным как тестовым тупым запросником-ответчиком с ГИС.

Чтобы не пришлось тратить время на изготовления данного инструмента, я его решил выложить сюда для всех кто работает с ГИС через сервисы по сертификату.



В этой версии нет вылетов при отсутствии signed-data-container.

Библиотека подписи законченная и усовершенствованная на вызовы из рефлексии в рабочем цикле приложения (хотя, там есть ещё пара моментов, чтобы ну совсем всё оптимизировать).



Прошу автора поместить этот запросник-ответчик в шапку.
0
Вложения
Тип файла: 7z GisServiceTest_CF.7z (1.44 Мб, 114 просмотров)
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
16.10.2017, 11:27 63
Недавно на сервере ППАК (сегодня) при экспорте дома, ГИС стала выдавать непонятно что.

WebRequestHandler десериализатора XML ругался на то, что в корневом элементе XML найдено что-то, что мешает десериализации.



Для того, чтобы понять точно, что приходит с ГИС была сделана "голая кукла Ланит", которая имеет в себе только функционал отправки запроса по XML шаблону и подписи его без КриптоПро.NET и КриптоКом "радиотунеллей". В алгоритме подписи был использован функционал подписи GostCryptography.



Эта программа не является ничем иным как тестовым тупым запросником-ответчиком с ГИС.

Чтобы не пришлось тратить время на изготовления данного инструмента, я его решил выложить сюда для всех кто работает с ГИС через сервисы по сертификату.



В этой версии нет вылетов при отсутствии signed-data-container.

Библиотека подписи законченная и усовершенствованная на вызовы из рефлексии в рабочем цикле приложения (хотя, там есть ещё пара моментов, чтобы ну совсем всё оптимизировать).



Прошу автора поместить этот запросник-ответчик в шапку.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
16.10.2017, 11:47  [ТС] 64
Цитата Сообщение от umatkot Посмотреть сообщение
Прошу автора поместить этот запросник-ответчик в шапку.
Вы можете немного доработать ваше приложение в следующих аспектах?
1. Скомпилировать и выложить в архиве Release версию, чтобы ее не нужно было собирать
2. Добавить диалог выбора сертификата - сейчас приложение падает даже при прописанном в GisServiceTest.exe.config правильном отпечатке.
0
Миниатюры
Интеграция с ГИС ЖКХ и подпись SOAP без Крипто .NET и stunnel  
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
16.10.2017, 14:16 65
hhmm, там указывается local_machine - расположение сертификата, нужно поставить current_user.
Завтра переделаю, хоп.
Я не подумал, что у всех в curernt_user.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
16.10.2017, 14:44  [ТС] 66
Цитата Сообщение от umatkot Посмотреть сообщение
hhmm, там указывается local_machine - расположение сертификата, нужно поставить current_user.
Завтра переделаю, хоп.
Я не подумал, что у всех в curernt_user.
Угу, вписал current_user и еще пароль для контейнера. Теперь не падает.

В окошке видно The remote server returned an error: (500) Internal Server Error., т.е. наверное программа работает а ГИС ЖКХ как обычно
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.10.2017, 02:23 67
hhmm, странно...
Мне прислали, что они исправили ошибку, я всё равно продолжаю получать Error while serializing JAXB object
Он должен выводить либо исключение, либо строку, которую он получает с сервера....
Заметил одну штуку, если указать прокси для WebRequest, и пропустить трафик через Fiddler, то ответ от сервера несколько отличается - в Fiddler видно, что сервер пишет: "не найдена ИС с данным сертификатом", а Exception содержит просто ошибку сервера без какой-либо информации. Короче, я доработаю её ещё немного.
0
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
17.10.2017, 04:21 68
Цитата Сообщение от umatkot Посмотреть сообщение
Недавно на сервере ППАК (сегодня) при экспорте дома, ГИС стала выдавать непонятно что.
WebRequestHandler десериализатора XML ругался на то, что в корневом элементе XML найдено что-то, что мешает десериализации.
У меня тоже самое. При запросе getState() для получения результата асинхронной операции importMeteringDeviceData вылетает
Операция завершилась ошибкой: Адресат вызова создал исключение.
Имеется проблема в XML-данных, полученных из сети. Подробнее см. в описании внутреннего исключения.
Эти данные на корневом уровне недопустимы. Строка 1, позиция 1.


Ошибка возникла в воскресенье, где-то после 11-00 МСК, до этого времени всё работало. Сделал обращение в тех.поддержку. Жду ответа от них.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.10.2017, 05:46 69
Версия тупого запросника-ответчика (тупая кукла Ланита 0.2).
Микроинструкция:
В папке Requests находятся доступные запросы.
Имя файла запроса совпадает с именем метода Soap.
MessageGuid, Date в заголовке ставятся автоматом.
В папке приложения после цикла работы выводится (имя метода Soap)_(Request/Response).xml
Для поиска сертификата нужно указать его Fingerprint в конфиге. Сертификаты ищутся в хранилище пользователя.
Там же проставляется OrgPPAID и адрес endpoint.
Скомпилировал Debug и Release во избежании ковыряния в коде.
0
Вложения
Тип файла: 7z GisServiceTest_CF.7z (1.43 Мб, 81 просмотров)
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
17.10.2017, 05:50 70
Я не смог найти в GostCryptography метод вызова окна с сертами.
Не знаю, если его нет, то можно сделать самому.

Добавлено через 3 минуты
Цитата Сообщение от vst377 Посмотреть сообщение
Сделал обращение в тех.поддержку. Жду ответа от них
Да, тоже самое.
Я им написал, они ответили, что исправили, но всё равно на некоторых объектах не канает.

Сделай запрос с моим запросником-ответчиком, потренируйся. Сам шаблон можно сделать из SOAPUI.
Если получится на выходных сделаю более продвинутую версию(GUI) с выбором платформы, но он так и останется тупым(запросник-ответчик).
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
17.10.2017, 22:15  [ТС] 71
Цитата Сообщение от umatkot Посмотреть сообщение
Прошу автора поместить этот запросник-ответчик в шапку.

Не по теме:


Тупой вопрос, а как исправить/дополнить шапку?
Хотел вставить ссылки на проект gizmo23 выложенный ранее и ваш в шапку, не понял из чтения справки по форуму какую кнопку нажимать для правки шапки.
Или надо призывать модератора?

0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
18.10.2017, 03:16 72
hhmm,

Не по теме:

Тоже не по теме. Есть проект, который генерирует более аккуратный код для C# из XSD, его можно переделать для генерации XML и эти XML динамически получать с конкретной платформы для куклы.
Тогда в кукле можно будет делать запрос на сайт, генерировать весь набор XML и сделать аналог SOAP UI, но более приближённый к нашей теме ГИС...
Вопрос: стоит ли заморачиваться? И согласен, кто-нибудь сделать code-review, для дальнейшей работы?

0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
19.10.2017, 22:40  [ТС] 73
Цитата Сообщение от umatkot Посмотреть сообщение
vst377, не обязательно прочёсывать все ветки, в надежде найти там ошибку. В XSD чётко прописаны варианты результатов получаемых объектов.
Вы, уважаемый umatkot, слишком хорошо о них думаете
Сегодня появился топик в жире - Несовпадение количества CommonResult при импорте ДРСО, так там люди пишут, что:
При выгрузке договоров ресурсоснабжения получили ответ, в котором встречаются два CommonResult с ошибками на один TransportGuid и несколько одинаковых ошибок в рамках одного CommonResult.
Выдернул из приложенного к сообщению куска ответа сервера:

<ns4:TransportGUID>c6e5ec30-1304-4590-aba9-5eacf109903f</ns4:TransportGUID>
<ns4:TransportGUID>5465b3b0-ea7d-42e6-bdf1-61673b32c3f7</ns4:TransportGUID>
<ns4:TransportGUID>6255d1ff-ca8d-4ce5-81e1-db307905571e</ns4:TransportGUID>
<ns4:TransportGUID>4f17089b-0106-4876-b984-311d36ee7056</ns4:TransportGUID>
<ns4:TransportGUID>68a44cec-d5be-4875-a6ad-68ce3bd1f33a</ns4:TransportGUID>
<ns4:TransportGUID>5465b3b0-ea7d-42e6-bdf1-61673b32c3f7</ns4:TransportGUID>
<ns4:TransportGUID>4f17089b-0106-4876-b984-311d36ee7056</ns4:TransportGUID>
Так что все таки лучше обойти все рекурсией и тщательно документировать весь мусор приехавший с сервера.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
20.10.2017, 03:08 74
Цитата Сообщение от hhmm Посмотреть сообщение
Так что все таки лучше обойти все рекурсией

Не по теме:

Я всё понимаю, но не нужна там рекурсия - не нужна. Вы оправдываете своё решение, потому-что вначале не разобрались в схемах от них - в остальных уровнях не может быть ошибок.
Признаться, по первой, мной тоже был предпринят рекурсивный метод и со временем вообще пришлось отказаться от него. Когда копошился в своих кастомных конвертерах из wsdl в код C#, пришло понимание, что там рекурсия - от недостатка инфы по структуре.
По сути, ошибка должна быть только на уровне запроса и на уровне объекта - в глубину гулять дальше смысла не вижу - транжирить ресурсы непозволительно, тем более, когда объектов очень много.
Сама мысль об ошибках на более глубоких уровнях как минимум кажется мне оскорбительной!!!


Если CommonResult дублируются и дублируются сами объекты (не только TransportGuid), то от такого выброса поможет элементарная группировка по TransportGuid. Если дублируется TransportGuid, но текст ошибки - разный, то при группировке по TransportGuid, можно элементарно агрегировать эти строки в массив или одну большую портянку.
:-) У меня вообще нет доступа к тому хелпдеску
0
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
10.11.2017, 11:19 75
Уважаемый hhmm!

Можете дать наводку или подсказать решение.
Столкнулся с проблемой. SvcUtil.exe при обработке описания сервисов ГИС ЖКХ не учитывает специфику в типах decimal из файла hcs_wsdl_xsd\lib\hcs-bills-base.xsd.
Например, при сериализации типа SmallMoneyType
XML
1
2
3
4
5
6
7
8
9
10
    <xs:simpleType name="SmallMoneyType">
        <xs:annotation>
            <xs:documentation>Маленькая сумма</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:decimal">
            <xs:totalDigits value="10"/>
            <xs:fractionDigits value="2"/>
            <xs:pattern value="\d+(\.\d{2})?"/>
        </xs:restriction>
    </xs:simpleType>
не учитывается условие fractionDigits (https://msdn.microsoft.com/ru-... .110).aspx fractionDigits
не обрабатывается) и дробная часть не приводится к виду 0.00. ГИС ЖКХ на такие вещи выдаёт ошибку.

Можно как-то исправить данную проблему малой кровью? Как я понимаю, нужно писать свой обработчик для SmallMoneyType и других подобных типов? На сколько это сложно сделать?
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
10.11.2017, 11:39  [ТС] 76
Цитата Сообщение от vst377 Посмотреть сообщение
Можно как-то исправить данную проблему малой кровью? Как я понимаю, нужно писать свой обработчик для SmallMoneyType и других подобных типов? На сколько это сложно сделать?
На вход нужно подавать округленные значения:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <summary>
/// Округлить decimal до 0 знаков после запятой
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
protected static decimal Round0(decimal d)
    {
    return Decimal.Round(d, 0);
    }
 
/// <summary>
/// Округлить decimal до двух знаков после запятой
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
protected static decimal Round2(decimal d)
    {
    return Decimal.Round(d, 2);
    }
 
/// <summary>
/// Округлить decimal до семи знаков после запятой
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
protected static decimal Round7(decimal d)
    {
    return Decimal.Round(d, 7);
    }
0
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
10.11.2017, 12:48 77
Ну а если у меня 12.5 ? Как я понимаю ГИС ЖКХ ждёт что-то типа 12.50
Вот пример запроса:
Кликните здесь для просмотра всего текста

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="utf-16"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:importCharterData</Action>
        <h:RequestHeader xmlns:h="http://dom.gosuslugi.ru/schema/integration/base/" xmlns="http://dom.gosuslugi.ru/schema/integration/base/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Date>2017-11-10T14:25:11.6541011+07:00</Date>
            <MessageGUID>49bbcaa5-b757-4c14-96eb-4447becf9cc7</MessageGUID>
            <orgPPAGUID>5e461b17-4ec1-49d3-976c-dda0ba97ec03</orgPPAGUID>
            <IsOperatorSignature>true</IsOperatorSignature>
        </h:RequestHeader>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <importCharterRequest Id="signed-data-container" p5:version="10.0.1.1" xmlns="http://dom.gosuslugi.ru/schema/integration/house-management/" xmlns:p5="http://dom.gosuslugi.ru/schema/integration/base/">
            .............................
            <p5:TransportGUID>e4c73ed9-43c2-4608-adee-babd1369419b</p5:TransportGUID>
            <PlaceCharterPaymentsInfo>
                <BeginDate>2017-06-01</BeginDate>
                <EndDate>2018-03-01</EndDate>
                <ServicePayment>
                    <Service>
                        <Code xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">3389</Code>
                        <GUID xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">5dcacd07-0e9a-4cc1-9bd0-c09b2aab9a37</GUID>
                        <Name xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">Уборка мусоропроводов</Name>
                    </Service>
                    <ServicePaymentSize>0.98</ServicePaymentSize>
                </ServicePayment>
                <ServicePayment>
                    <Service>
                        <Code xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">3390</Code>
                        <GUID xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">d4dcd390-fb36-4687-8131-136ba65a15d3</GUID>
                        <Name xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">Утилизация ТКО</Name>
                    </Service>
                    <ServicePaymentSize>1</ServicePaymentSize>
                </ServicePayment>
                <ServicePayment>
                    <Service>
                        <Code xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">3391</Code>
                        <GUID xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">60fa389a-7ef0-4cd6-b7b5-b7321bea7462</GUID>
                        <Name xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">Ремонт жилья</Name>
                    </Service>
                    <ServicePaymentSize>3</ServicePaymentSize>
                </ServicePayment>
                <ServicePayment>
                    <Service>
                        <Code xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">3392</Code>
                        <GUID xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">fd38707a-daa0-4ec8-939b-18599c1c7cd5</GUID>
                        <Name xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">Содержание жилья</Name>
                    </Service>
                    <ServicePaymentSize>12.5</ServicePaymentSize>
                </ServicePayment>
                <ServicePayment>
                    <Service>
                        <Code xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">3393</Code>
                        <GUID xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">e2479411-1b6e-4eb0-aca7-aa76efc3d6a2</GUID>
                        <Name xmlns="http://dom.gosuslugi.ru/schema/integration/nsi-base/">Вывоз ТКО</Name>
                    </Service>
                    <ServicePaymentSize>1.25</ServicePaymentSize>
                </ServicePayment>
                <CharterVersionGUID>1c999820-5a50-4b77-85d0-2277386f1981</CharterVersionGUID>
            </PlaceCharterPaymentsInfo>
        </importCharterRequest>
    </s:Body>
</s:Envelope>

и ответ
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-16"?>
<ns2:Envelope xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns6="http://dom.gosuslugi.ru/schema/integration/nsi-base/" xmlns:ns5="http://dom.gosuslugi.ru/schema/integration/account-base/" xmlns:ns8="http://dom.gosuslugi.ru/schema/integration/metering-device-base/" xmlns:ns7="http://dom.gosuslugi.ru/schema/integration/individual-registry-base/" xmlns:ns13="http://dom.gosuslugi.ru/schema/integration/house-management/" xmlns:ns9="http://dom.gosuslugi.ru/schema/integration/organizations-registry-base/" xmlns:ns12="http://dom.gosuslugi.ru/schema/integration/bills-base/" xmlns:ns11="http://dom.gosuslugi.ru/schema/integration/payments-base/" xmlns:ns10="http://dom.gosuslugi.ru/schema/integration/organizations-base/" xmlns:ns4="http://dom.gosuslugi.ru/schema/integration/base/" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#">
    <ns2:Header />
    <ns2:Body>
        <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/">
            <faultcode>ns2:Server</faultcode>
            <faultstring>FMT001300: Line: 1. Column: 8519. Message: cvc-pattern-valid: Value '12.5' is not facet-valid with respect to pattern '\d+(\.\d{2})?' for type 'SmallMoneyType'.
</faultstring>
            <detail>
                <ns4:Fault xmlns:ns4="http://dom.gosuslugi.ru/schema/integration/base/">
                    <ns4:ErrorCode>FMT001300</ns4:ErrorCode>
                    <ns4:ErrorMessage>Line: 1. Column: 8519. Message: cvc-pattern-valid: Value '12.5' is not facet-valid with respect to pattern '\d+(\.\d{2})?' for type 'SmallMoneyType'.
</ns4:ErrorMessage>
Сейчас попробовал и заменил тип поля ServicePaymentSize на string. При этом формирую 12.50. ГИС ЖКХ выдаёт ошибку "SYSTEM_ERROR Во время работы системы произошла неизвестная ошибка" ....

Добавлено через 30 минут
Наверное опять система колдобится
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
10.11.2017, 13:13  [ТС] 78
Цитата Сообщение от vst377 Посмотреть сообщение
Ну а если у меня 12.5 ? Как я понимаю ГИС ЖКХ ждёт что-то типа 12.50
Судя по RegExp <xsattern value="\d+(\.\d{2})?"/> должно быть два знака, значит
при присвоении значения нужно подать 12.50, что можно получить вызвав Round2
0
11 / 11 / 0
Регистрация: 02.06.2017
Сообщений: 75
13.11.2017, 06:25 79
Очень интересно... А разве тут не такая ситуация?
C#
1
Decimal.Round((decimal)12.5, 2).ToString() == "12.5"
Причём, ToString() идет уже в процессе сериализации данных для отправки запроса к ГИС.
0
62 / 53 / 0
Регистрация: 01.04.2016
Сообщений: 342
13.11.2017, 10:13  [ТС] 80
Цитата Сообщение от vst377 Посмотреть сообщение
Очень интересно... А разве тут не такая ситуация?
Не знаю как работает сериализатор, но этот подход работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 10:13

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

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ...

Осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через TCP сокет
Здравствуйте. Требуется осуществить подпись SOAP, по стандартам ГИС ГМП, принятого через тсп сокет....

Ошибки интеграции ГИС ЖКХ
Я много тут читал форум по интеграции ГИС. На старте, впрочем, как и в последствии возникает много...

Soap, Java, Гис ЖКХ
Добрый день! Имеет ли кто опыт работы с soap в Java? Поставлена задача наладить работу с ГИС ЖКХ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.