Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/847: Рейтинг темы: голосов - 847, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 16.12.2015
Сообщений: 1
.NET 4.x

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

16.12.2015, 11:46. Показов 175506. Ответов 999

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке C#, .NET Framework 4
Данный сервис предоставляет SOAP веб-сервисы для приема и передачи информации, соединение защищается сертификатом по алгоритму ГОСТ. Каждый элемент внутри тела SOAP сообщения подписывается сигнатурой XAdES-BES.
На данный момент для осуществления защищённого соединения я использую «МагПро КриптоТуннель» (stunnel) со следующими настройками:
Конфигурация stunnel (stunnel.conf)
verify=2
client=yes
CAFile=CA-test2-cryptopro.pem
engine=gost
usb_eject=yes
sslVersion=TLSv1
taskbar=yes
DEBUG=7

[pseudo-https]
protocol = http
accept = 127.0.0.1:8754
connect = 54.76.42.99:60045
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0
cert=test.pem
key=test.key

Для обмена SOAP сообщениями я использую стандартный сервис WCF с прокси-классами, сгенерированные из WSDL файлов. Для подписи SOAP сообщений сигнатурой использую ниже представленный класс:
C#. Класс для подписи исходного SOAP сообщения
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
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class ServiceClientBehavior : IEndpointBehavior, IClientMessageInspector
{
    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        XmlDocument doc = new XmlDocument();
        MemoryStream ms = new MemoryStream();
        XmlWriter writer = XmlWriter.Create(ms);
        request.WriteMessage(writer);
        writer.Flush();
        ms.Position = 0;
        doc.Load(ms);
        
        SignXml(doc);
        
        ms.SetLength(0);
        writer = XmlWriter.Create(ms);
        doc.WriteTo(writer);
        writer.Flush();
        ms.Position = 0;
        XmlReader reader = XmlReader.Create(ms);
        request = Message.CreateMessage(reader, int.MaxValue, request.Version);
 
        return null;
    }
    
    void SignXml(XmlDocument doc)
    {
        doc.PreserveWhitespace = true;
 
        // Получение элемента из тела сообщения
        var requestNode = doc.DocumentElement.ChildNodes[1].ChildNodes[0];
        var signRequestNode = SignRequest(requestNode);
 
        var body = requestNode.ParentNode;
        body.RemoveChild(requestNode);
        body.AppendChild(signRequestNode);
    }
    XmlNode SignRequest(XmlNode reqNode)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.PreserveWhitespace = true;
        xmlDoc.AppendChild(xmlDoc.ImportNode(reqNode, true));
 
        var signedXml = new SignedXML(xmlDoc);
        signedXml.SigningKey = certificate.PrivateKey;
 
        KeyInfo keyInfo = new KeyInfo();
        keyInfo.AddClause(new KeyInfoX509Data(certificate));
        signedXml.KeyInfo = keyInfo;
 
        signedXml.Signature.Id = "SignatureId";
 
        #region Создание DataObject
        {
            XmlElement SignaturePropertiesRoot;
            XmlElement QualifyingPropertiesRoot;
            string xadesURI = "http://uri.etsi.org/01903/v1.3.2#";
            string dsURI = "http://www.w3.org/2000/09/xmldsig#";
 
            QualifyingPropertiesRoot = xmlDoc.CreateElement("xades", "QualifyingProperties", xadesURI);
            QualifyingPropertiesRoot.SetAttribute("Target", "#SignatureId");
 
            SignaturePropertiesRoot = xmlDoc.CreateElement("xades", "SignedProperties", xadesURI);
            SignaturePropertiesRoot.SetAttribute("Id", "SignedPropertiesId");
 
            XmlElement SignedSignatureProperties = xmlDoc.CreateElement("xades", "SignedSignatureProperties", xadesURI);
 
            XmlElement timestamp = xmlDoc.CreateElement("xades", "SigningTime", xadesURI);
            timestamp.InnerText = XmlConvert.ToString(DateTimeOffset.Now);
            SignedSignatureProperties.AppendChild(timestamp);
 
            XmlElement SigningCertificate = xmlDoc.CreateElement("xades", "SigningCertificate", xadesURI);
            XmlElement Cert = xmlDoc.CreateElement("xades", "Cert", xadesURI);
            XmlElement CertDigest = xmlDoc.CreateElement("xades", "CertDigest", xadesURI);
 
            XmlElement DigestMethod = xmlDoc.CreateElement("ds", "DigestMethod", dsURI); DigestMethod.SetAttribute("Algorithm", "http://www.w3.org/2001/04/xmldsig-more#gostr3411");
            XmlElement DigestValue = xmlDoc.CreateElement("ds", "DigestValue", dsURI); DigestValue.InnerText = ComputeGostHash(this.ClientCertificate.RawData);
            CertDigest.AppendChild(DigestMethod);
            CertDigest.AppendChild(DigestValue);
            Cert.AppendChild(CertDigest);
 
            XmlElement IssuerSerial = xmlDoc.CreateElement("xades", "IssuerSerial", xadesURI);
            XmlElement X509IssuerName = xmlDoc.CreateElement("ds", "X509IssuerName", dsURI); X509IssuerName.InnerText = GetIssuerName(certificate);
            XmlElement X509SerialNumber = xmlDoc.CreateElement("ds", "X509SerialNumber", dsURI); X509SerialNumber.InnerText = GetSerialNumber(certificate);
            IssuerSerial.AppendChild(X509IssuerName);
            IssuerSerial.AppendChild(X509SerialNumber);
            Cert.AppendChild(IssuerSerial);
 
            SigningCertificate.AppendChild(Cert);
            SignedSignatureProperties.AppendChild(SigningCertificate);
 
            SignaturePropertiesRoot.AppendChild(SignedSignatureProperties);
            QualifyingPropertiesRoot.AppendChild(SignaturePropertiesRoot);
            DataObject dataObject = new DataObject
            {
                Data = QualifyingPropertiesRoot.SelectNodes("."),
            };
            signedXml.AddObject(dataObject);
        }
        #endregion
 
        signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
        signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
 
        var reference = new Reference();
        reference.Uri = "#RequestId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        reference = new Reference();
        reference.Uri = "#SignedPropertiesId";
        reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
        reference.Type = "http://uri.etsi.org/01903#SignedProperties";
        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
        reference.AddTransform(new XmlDsigExcC14NTransform());
        signedXml.AddReference(reference);
 
        signedXml.ComputeSignature();
 
        XmlElement signatureNode = signedXml.GetXml();
        xmlDoc.DocumentElement.PrependChild(xmlDoc.ImportNode(signatureNode, true));
 
        if (!VerifyXml(xmlDoc))
            throw new Exception("Подпись не проходит проверку.");
        return reqNode.OwnerDocument.ImportNode(xmlDoc.DocumentElement, true);
    }
}

В результате после подписи элемента "exportNsiItemRequest" SOAP-сообщение выглядит следующим образом:
XML. Подписанное SOAP сообщение
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
64
65
<?xml version="1.0" encoding="utf-8"?>
<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:exportNsiItem</Action>
        <h:RequestHeader xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/">
            <Date>2015-12-16T16:12:47.9885439+10:00</Date>
            <MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</MessageGUID>
            <SenderID>387142bd-4ff7-4d15-ab09-18b3d99fd9bd</SenderID>
        </h:RequestHeader>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <exportNsiItemRequest Id="RequestId" xmlns="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/">
            <Signature Id="SignatureId" xmlns="http://www.w3.org/2000/09/xmldsig#">
                <SignedInfo>
                    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <Reference URI="#RequestId">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>fpTlCLCz9/78q4Zpng9eAiCZuaHP51fCXfllN2TeFPw=</DigestValue>
                    </Reference>
                    <Reference URI="#SignedPropertiesId" Type="http://uri.etsi.org/01903#SignedProperties">
                        <Transforms>
                            <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </Transforms>
                        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <DigestValue>9sBDvpcyxJLVxibQGy280Rz/MlcESescb6k6MEGKreQ=</DigestValue>
                    </Reference>
                </SignedInfo>
                <SignatureValue>...</SignatureValue>
                <KeyInfo>
                    <X509Data>
                        <X509Certificate>...</X509Certificate>
                    </X509Data>
                </KeyInfo>
                <Object>
                    <xades:QualifyingProperties Target="#SignatureId" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="SignedPropertiesId">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T16:13:13.4750017+10:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" />
                                            <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">B2/4UjEeZwUG0c+mlEfnAZIy8mlbGpkOp4L+jPkgcVY=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName xmlns:ds="http://www.w3.org/2000/09/xmldsig#">cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber xmlns:ds="http://www.w3.org/2000/09/xmldsig#">401416565317479933092244230678231137456309019</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </Object>
            </Signature>
            <RegistryNumber>221</RegistryNumber>
        </exportNsiItemRequest>
    </s:Body>
</s:Envelope>

Проблема заключается в том, что ответ от сервера приходит следующий:
ru.lanit.security.crypto.CryptoException : ЭП не прошла проверку: Invalid XML Signature
Текст ответного сообщения следующий:
XML. SOAP-ответ от сервера
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
<soap:Envelope xmlns:ns2="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns5="http://dom.gosuslugi.ru/schema/integration/7.1.0.2/nsi/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:ResultHeader>
            <ns2:Date>2015-12-16T09:14:28.819+03:00</ns2:Date>
            <ns2:MessageGUID>c7a1d946-9fcf-4ebc-9c08-20ebe81179cf</ns2:MessageGUID>
        </ns2:ResultHeader>
    </soap:Header>
    <soap:Body>
        <ns5:exportNsiItemResult Id="signed-data-container">
            <ds:Signature Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
                    <ds:Reference URI="#signed-data-container">
                        <ds:Transforms>
                            <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>iqCeIlUfsqxdZRuMTjvYKWBTVOtSNrJIYledBG8LrWA=</ds:DigestValue>
                    </ds:Reference>
                    <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                        <ds:DigestValue>yASmvpbUBqEPr1Vp+qzYjXhzzXymC9ggqUZZ8GbBVkI=</ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>...</ds:SignatureValue>
                <ds:KeyInfo>
                    <ds:X509Data>
                        <ds:X509Certificate>...</ds:X509Certificate>
                    </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                    <xades:QualifyingProperties Target="#xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
                        <xades:SignedProperties Id="xmldsig-3208628d-03cc-4576-895d-ea6d78b1b6dd-signedprops">
                            <xades:SignedSignatureProperties>
                                <xades:SigningTime>2015-12-16T09:14:28.870+03:00</xades:SigningTime>
                                <xades:SigningCertificate>
                                    <xades:Cert>
                                        <xades:CertDigest>
                                            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
                                            <ds:DigestValue>Sz5+eJyswooXj8h3A5bhMbPG61QPExSKXuw+ZLzyeQ8=</ds:DigestValue>
                                        </xades:CertDigest>
                                        <xades:IssuerSerial>
                                            <ds:X509IssuerName>cn=CRYPTO-PRO Test Center 2,o=CRYPTO-PRO LLC,l=Moscow,c=RU,1.2.840.113549.1.9.1=support@cryptopro.ru</ds:X509IssuerName>
                                            <ds:X509SerialNumber>401416477754091206680439394611221196150735163</ds:X509SerialNumber>
                                        </xades:IssuerSerial>
                                    </xades:Cert>
                                </xades:SigningCertificate>
                            </xades:SignedSignatureProperties>
                        </xades:SignedProperties>
                    </xades:QualifyingProperties>
                </ds:Object>
            </ds:Signature>
            <ns2:ErrorMessage>
                <ns2:ErrorCode>AUTH01105</ns2:ErrorCode>
                <ns2:Description>Ошибка формата подписи запроса</ns2:Description>
                <ns2:StackTrace>ru.lanit.hcs.integration.common.exception.OperationProcessorException: ЭП не прошла проверку: Invalid XML Signature</ns2:StackTrace>
            </ns2:ErrorMessage>
        </ns5:exportNsiItemResult>
    </soap:Body>
</soap:Envelope>


Подскажите пожалуйста:
1) Как сделать валидную подпись, которая будет проходить проверку сервером, используя WCF ?
2) Как с помощью средств CryptoPro.NET отказаться от использования «МагПро КриптоТуннель» ?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2015, 11:46
Ответы с готовыми решениями:

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

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

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

999
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
18.05.2016, 09:03
Студворк — интернет-сервис помощи студентам
VladimirGT, и после этого вернулась ошибка Доступ запрещен для поставщика данных: организация “????????????????”, полномочие “РСО”. ?
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 09:12
ДА! Если договор есть почему тогда ругается?
0
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
18.05.2016, 09:19
VladimirGT, у меня такая ошибка была при использовании importSupplyResourceContract. ТП мне ответила, что у меня нет доступа к этому сервису, хотя в заявке я все указывала.... Просила дать доступ именно для этой операции. Может быть вам также нужно сделать?
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 09:21
Хорошо, спасибо большое! Хотя я для теста при заявке указал доступ ко всем сервисам! Буду звонить!
0
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
18.05.2016, 09:24
VladimirGT, а куда вы звоните? я только через форму общаюсь, причем это не очень оперативно получается.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 10:03
да я понял уже, в ТП, сказали только по заявке. ТП просто ужасно.
У кого нибудь есть простейший пример xml по асинхронному сервису и getState() по нему?
0
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
18.05.2016, 10:18
Еще вопрос. Я смотрела семинары от ГИС ЖКХ для разработчиков. Почти в каждом из них говорится о том, что помимо формы заявки для обращений можно использовать еще систему JIRA. Доступ к ней можно получить, отправив заявку на integration@dom.gosuslugi.ru. Я отправила 11 мая, ответа до сих пор нет. Кто-нибудь еще пытался получить доступ к ней?
0
6 / 6 / 0
Регистрация: 24.12.2015
Сообщений: 41
18.05.2016, 10:48
Цитата Сообщение от VladimirGT Посмотреть сообщение
Хорошо, спасибо большое! Хотя я для теста при заявке указал доступ ко всем сервисам! Буду звонить!
не надо звонить и писать. доступ у вас есть это 100%
когда нет доступа будет ошибка:
AUT011009: Операция не разрешена

А у вас ошибка другая. там либо нет ДРСО\ДУ либо дом уже прикреплен другой УО\РСО

Добавлено через 1 минуту
Цитата Сообщение от trawinka Посмотреть сообщение
Еще вопрос. Я смотрела семинары от ГИС ЖКХ для разработчиков. Почти в каждом из них говорится о том, что помимо формы заявки для обращений можно использовать еще систему JIRA. Доступ к ней можно получить, отправив заявку на integration@dom.gosuslugi.ru. Я отправила 11 мая, ответа до сих пор нет. Кто-нибудь еще пытался получить доступ к ней?
уже многие работают в ней.
0
6 / 5 / 0
Регистрация: 10.03.2015
Сообщений: 58
18.05.2016, 10:49
Dr_Elvis, а как вы получали доступ к ней?
У меня была такая же проблема, все решала через ТП.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 12:10
я выбрал частный дом тоже самое

Добавлено через 3 минуты
пробовал по шаблону через xls тоже не грузит

Добавлено через 17 минут
кадастрового номера у меня нет. я так понимаю он может ругаться из-за него?

Добавлено через 5 минут
Выписка из "Альбом ТТФ":
Перед началом сохранения сведений о доме выполняются общие контроли, в т.ч. проверка, что все переданные КН в объектах дома есть в ГКН; или все условные номера/номера и даты регистрации прав/обременений для связывания с ЕГРП есть в ЕГРП; при этом если хотя бы один КН для ГКН не найден, то сведения по всему дому не сохраняются (интеграция);

кадастрового номера у меня нет. я так понимаю он может ругаться из-за него?
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
18.05.2016, 14:14
Цитата Сообщение от trawinka Посмотреть сообщение
Кто-нибудь еще пытался получить доступ к ней?
Написал несколько писем, не получил ни одного ответа.


Кто-нибудь пробовал добавлять услуги?
Сейчас попробовал вызвать importMunicipalServices, как я понимаю это единственный путь добавить услуги в ГИС ЖКХ (так как в веб-интерфейсе кнопок не нашли)
опять говорит: попка-дурак - FMT001300 неверный XML.

Файл запроса прилагаю
Вложения
Тип файла: txt importMunicipalServices - запрос.txt (5.4 Кб, 21 просмотров)
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
18.05.2016, 20:08
Цитата Сообщение от hhmm Посмотреть сообщение
Кто-нибудь пробовал добавлять услуги?
Оказалась ложная тревога - к вечеру все заработало.

Наверное, пока они накатывают очередное обновление, парзер впадает в ступор и на все вопросы отвечает
Цитата Сообщение от hhmm Посмотреть сообщение
FMT001300 неверный XML
.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 21:01
hhmm, У них стенд не работал какое-то время сегодня
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
18.05.2016, 21:32
Цитата Сообщение от VladimirGT Посмотреть сообщение
hhmm, У них стенд не работал какое-то время сегодня
Ну да, только попробуй догадайся что происходит.
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
18.05.2016, 21:41
hhmm, у тебя есть xml для запроса getState? У меня запрос проходит, а getState возвращает некорректный xml

Добавлено через 6 минут
запрос:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<soapenv:Envelope xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:in="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sr="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/nsi-common/" xmlns:sx="http://www.w3.org/2001/XMLSchema">
    <soapenv:Header>
        <in:RequestHeader>
            <in:Date>2016-05-18T21:39:46</in:Date>
            <in:MessageGUID>d1e03e4e-8dd2-43b7-84fc-5a07d1b655d7</in:MessageGUID>
            <in:SenderID>????????????????????</in:SenderID>
        </in:RequestHeader>
    </soapenv:Header>
    <soapenv:Body>
        <sr:getStateRequest>
            <sr:MessageGUID>08cb9e6d-6839-4b30-8e97-398545188809</sr:MessageGUID>
        </sr:getStateRequest>
    </soapenv:Body>
</soapenv:Envelope>
ответ:
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
64
65
66
67
68
69
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soap:Envelope xmlns:ns4="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns5="http://dom.gosuslugi.ru/schema/integration/8.7.0.7/nsi-common/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Server</faultcode>
            <faultstring>FMT001300: Некорректный XML</faultstring>
            <detail>
                <ns4:Fault>
                    <ns4:ErrorCode>FMT001300</ns4:ErrorCode>
                    <ns4:ErrorMessage>Некорректный XML</ns4:ErrorMessage>
                    <ns4:StackTrace>ru.lanit.hcs.integration.common.exception.SoapFaultException: java.lang.IllegalStateException: Invalid body: class org.apache.xerces.dom.ElementNSImpl
    at ru.lanit.hcs.integration.common.spring.processor.ValidationProcessor.processBody(ValidationProcessor.java:243)
    at ru.lanit.hcs.integration.common.spring.processor.ValidationProcessor.process(ValidationProcessor.java:104)
    at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
    at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:111)
    at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:82)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
    at org.apache.camel.component.cxf.CxfConsumer$1.syncInvoke(CxfConsumer.java:137)
    at org.apache.camel.component.cxf.CxfConsumer$1.invoke(CxfConsumer.java:78)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126)
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
    at org.jboss.modcluster.container.jbossweb.JBossWebContext$RequestListenerValve.event(JBossWebContext.java:91)
    at org.jboss.modcluster.container.jbossweb.JBossWebContext$RequestListenerValve.invoke(JBossWebContext.java:72)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Invalid body: class org.apache.xerces.dom.ElementNSImpl
    at ru.lanit.hcs.integration.common.spring.service.impl.XmlServiceImpl.getRequestBody(XmlServiceImpl.java:99)
    at ru.lanit.hcs.integration.common.spring.processor.ValidationProcessor.processBody(ValidationProcessor.java:241)
    ... 47 more
</ns4:StackTrace>
                </ns4:Fault>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
18.05.2016, 22:07
Цитата Сообщение от VladimirGT Посмотреть сообщение
hhmm, у тебя есть xml для запроса getState? У меня запрос проходит, а getState возвращает некорректный xml
getState как я понимаю это для асинхронных запросов.

Я один раз попробовал дернуть асинхронный метод - ничего не получилось (см. мой пост 282, то же сообщение что и у вас)

Поэтому я пока решил асинхронными методами не пользоваться а запускать пачку запросов в пуле потоков.
В книжках написано, что по умолчанию один процессор обслуживает 250 потоков пула, на 8 ядерном проце это будет 2000 параллельных запросов - мне пока хватит

В пуле потоков все работает намного веселее - например я загружаю все справочники (сейчас уже 101 из 106 загружаются)
примерно за 1.5 минуты. Каждый запрос работает около 10 секунд, по очереди я бы их ждал около 1000 секунд = 16 минут.
А так 1.5 минуты - в 10 раз быстрее


Если когда-нибудь дойдем до продакшена - будем запускать несколько приложений с нескольких машин на ночь.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
19.05.2016, 04:16
hhmm, вот пример асинхронных запросов к справочникам. Работали до того момента, пока я не начал мучиться с сертификатом.
Сам XML getState не могу прислать, так как проблема при первичной отправке.
Код рабочий - 100%.
Вложения
Тип файла: rar NsiCommon.rar (1.7 Кб, 52 просмотров)
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
19.05.2016, 04:27
Цитата Сообщение от hhmm Посмотреть сообщение
будем запускать несколько приложений с нескольких машин на ночь
Простите, но это уже слишком. Можно сделать просто таски на каждый синхронный метод - будет тоже самое по скорости. Просто асинхронка работает так, как будто Вы даёте ГИС задачу и забываете о ней на некоторое время. Потом интересуетесь: "Как там мой импорт", а ЖКХ - вот вам СТЭЙТ))) Типа ждите, я думаю)))
0
0 / 0 / 0
Регистрация: 20.01.2016
Сообщений: 36
19.05.2016, 09:11
Всем большое спасибо!!!
0
 Аватар для hhmm
67 / 58 / 1
Регистрация: 01.04.2016
Сообщений: 346
19.05.2016, 10:21
Цитата Сообщение от umatkot Посмотреть сообщение
Можно сделать просто таски на каждый синхронный метод - будет тоже самое по скорости
Таски это фича .NET четвертой версии.
Я сочиняю для .NET 3.5 в VS 2008.

Цитата Сообщение от umatkot Посмотреть сообщение
Работали до того момента, пока я не начал мучиться с сертификатом
Тогда к чему эти страдания - я проблему обошел с помощью пула.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2016, 10:21

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

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

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

1С и ГИС ЖКХ. Интеграция
Доброго дня, коллеги! Я думаю многие слышали о такой ГИС, как ЖКХ. Друзья, сталкивался ли кто нибудь с задачей интеграции с этой...

Интеграция с ГИС ЖКХ (ГЖ). 400 Bad request
Вводная: 1. C#. Классы proxy для работы с API генерятся утилитой SvcUtil.exe из wsdl-ек. 2. При срабатывании форматно-логического...


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

Или воспользуйтесь поиском по форуму:
460
Закрытая тема Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru