Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/886: Рейтинг темы: голосов - 886, средняя оценка - 4.97
 Аватар для NaGuWaL
17 / 14 / 0
Регистрация: 22.04.2016
Сообщений: 287

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

04.05.2017, 15:29. Показов 197746. Ответов 876

Студворк — интернет-сервис помощи студентам
Предыдущая тема: Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ (4)


И так мы Я и umatkot, Берёмся за реализацию всего этого ... безобразия, кто хочет присоединиться пишите в личку.

Ссылка на гидхаб проекта будет предоставлена после того как мы запилим начальную версию с более менее работающим функционалом и маном интеграции...
3
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2017, 15:29
Ответы с готовыми решениями:

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

Интеграция с ГИС ЖКХ. Подпись SOAP и защита канала по ГОСТ
Здравствуйте! Передо мной стоит задача интеграции с системой ГИС ЖКХ (https://dom.gosuslugi.ru/) программой, написанной на языке...

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

876
 Аватар для Zmeishe
23 / 22 / 1
Регистрация: 31.08.2016
Сообщений: 178
24.04.2018, 18:32
Студворк — интернет-сервис помощи студентам
Всё, что было несколько лет назад, никто не обязан отражать в ГИС.
Для нас, сей час, время разделено на до и после начала работы с ГИС.
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
25.04.2018, 10:22
Цитата Сообщение от Zmeishe Посмотреть сообщение
Всё, что было несколько лет назад, никто не обязан отражать в ГИС.
Снятие то сегодня происходит, хоть и за прошлые периоды.
Итоговая сумма не сойдется. Кому-то в плюс пошел платеж, а в минус нет.
Сейчас отчеты в ЛК УО и РСО пока убогие, но в дальнейшем они будут наверняка расширяться и УО захотят смотреть там реальное состояние дел со своими поступлениями, начислениями и т.д., и не только УО, но и другие проверяющие и прочие заинтересованные органы.
0
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
26.04.2018, 06:11
Подскажите, как в:
C#
1
2
3
4
            BillsPortsTypeClient Proxy = new BillsPortsTypeClient("BillsPort");
            var request = new exportPaymentDocumentRequest();
            request.Id = "signed-data-container";
            request.ItemsElementName = new ItemsChoiceType5[] { ItemsChoiceType5.Year, ItemsChoiceType5.Month, ItemsChoiceType5.FIASHouseGuid };
Получить все платежные по дому за период.
Как впихнуть в request, например, перечень нужных лицевых (AccountNumber [0...1000])
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
26.04.2018, 07:35
Я получал ПД, которые я сам загружал ранее, но не получил их идентификатор, поэтому передаю конкретно PaymentDocumentNumber, который сам формировал при отпрвке, но если надо отправить запрос по AccountNumber, то в paymentItemNames указывается ItemsChoiceType5.AccountNumber а в paymentDocuments сам номер ЛС.
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
   List<string> paymentDocuments = new List<string>();
   List<Infrastructure.BillsService.ItemsChoiceType5> paymentItemNames = new List<Infrastructure.BillsService.ItemsChoiceType5>();
 
                            string paymentDocument;
 
                            OleDbDataReader docsListReader = commandGetDocList.ExecuteReader();
                            while (docsListReader.Read())
                            {
 
                                paymentDocument = docsListReader["PaymentDocumentNumber"].ToString();
                                paymentDocuments.Add(paymentDocument);
                                paymentItemNames.Add(Infrastructure.BillsService.ItemsChoiceType5.PaymentDocumentNumber);
 
 
                            }
                            docsListReader.Close();
 
 while (paymentDocuments.Count() > 0) //// надо нарезать на куски не более 1000 за раз
                            {
                                List<object> requestItems = new List<object>();
                                List<Infrastructure.BillsService.ItemsChoiceType5> itemsElementName = new List<Infrastructure.BillsService.ItemsChoiceType5>();
                                requestItems.Add(year);
                                itemsElementName.Add(Infrastructure.BillsService.ItemsChoiceType5.Year);
                                requestItems.Add(month);
                                itemsElementName.Add(Infrastructure.BillsService.ItemsChoiceType5.Month);
                                requestItems.Add(CommonUtils.LanitGuid(fias_guid);
                                itemsElementName.Add(Infrastructure.BillsService.ItemsChoiceType5.FIASHouseGuid);
 
 
                                requestItems.AddRange(paymentDocuments.Take(Math.Min(1000, paymentDocuments.Count())));
                                itemsElementName.AddRange(paymentItemNames.Take(Math.Min(1000, paymentItemNames.Count())));
 
                              
                                requestExportPaymDocData.exportPaymentDocumentRequest.Items = requestItems.ToArray();
                                requestExportPaymDocData.exportPaymentDocumentRequest.ItemsElementName = itemsElementName.ToArray();
                               
                                requestExportPaymDocData.RequestHeader.MessageGUID = CommonUtils.LanitGuid(Guid.NewGuid());
                                requestExportPaymDocData.RequestHeader.Date = DateTime.Now;
                                requestExportPaymDocData.RequestHeader.Item = CommonUtils.LanitGuid(orgppaguid);
 
                             response = service.exportPaymentDocumentData(requestExportPaymDocData);
                            ///......... что-то сделать с response 
                           paymentDocuments.RemoveRange(0, Math.Min(1000, paymentDocuments.Count()));
                                itemsElementName.RemoveRange(0, Math.Min(1000, paymentItemNames.Count()));
                            }// while (paymentDocuments.Count() > 0)
1
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
26.04.2018, 09:15
Цитата Сообщение от muf Посмотреть сообщение
Я получал ПД, которые я сам загружал ранее, но не получил их идентификатор, поэтому передаю конкретно PaymentDocumentNumber, который сам формировал при отпрвке, но если надо отправить запрос по AccountNumber, то в paymentItemNames указывается ItemsChoiceType5.AccountNumber а в paymentDocuments сам номер ЛС.
Спасибо. Все получилось.
Начинаю курить квитирование.....
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
27.04.2018, 10:34
Подскажите по такой странной ошибке.
Делаю importSupplierNotificationsOfOrderExecut ion

А оно мне в ответ
Ошибка сериализации одного из заголовков сообщения importSupplierNotificationsOfOrderExecut ionRequest1: "Невозможно создать временный класс (результат=1).
error CS0030: Cannot convert type 'GisConnect.Infrastructure.PaymentServic eAsync.PaymentDocument[]' to 'GisConnect.Infrastructure.PaymentServic eAsync.PaymentDocument'
error CS0029: Cannot implicitly convert type 'GisConnect.Infrastructure.PaymentServic eAsync.PaymentDocument' to 'GisConnect.Infrastructure.PaymentServic eAsync.PaymentDocument[]'
". Подробнее см. InnerException.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
Server stack trace: 
   в System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.AddHeadersToMessage(Message message, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
   в System.ServiceModel.Dispatcher.OperationFormatter.SerializeRequest(MessageVersion messageVersion, Object[] parameters)
   в System.ServiceModel.Dispatcher.ProxyOperationRuntime.BeforeRequest(ProxyRpc& rpc)
   в System.ServiceModel.Channels.ServiceChannel.PrepareCall(ProxyOperationRuntime operation, Boolean oneway, ProxyRpc& rpc)
   в System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
 
Exception rethrown at [0]: 
   в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   в GisConnect.Infrastructure.PaymentServiceAsync.PaymentPortsTypeAsync.importSupplierNotificationsOfOrderExecution(importSupplierNotificationsOfOrderExecutionRequest1 request)
Сам xml нормально вручную через XmlSerializer сформировался при этом из request-а
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
<?xml version="1.0" encoding="utf-16"?>
<importSupplierNotificationsOfOrderExecutionRequest1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <RequestHeader>
    <Date xmlns="http://dom.gosuslugi.ru/schema/integration/base/">2018-04-26T16:19:26.416+03:00</Date>
    <MessageGUID xmlns="http://dom.gosuslugi.ru/schema/integration/base/">28f646be-17b4-4a07-986c-b7706fa42e1f</MessageGUID>
    <orgPPAGUID xmlns="http://dom.gosuslugi.ru/schema/integration/base/">a02b2203-8b9b-40c4-af09-e95b00692478</orgPPAGUID>
    <IsOperatorSignature xmlns="http://dom.gosuslugi.ru/schema/integration/base/">true</IsOperatorSignature>
  </RequestHeader>
  <importSupplierNotificationsOfOrderExecutionRequest Id="signed-data-container" d2p1:version="10.0.1.1" xmlns:d2p1="http://dom.gosuslugi.ru/schema/integration/base/">
    <SupplierNotificationOfOrderExecution xmlns="http://dom.gosuslugi.ru/schema/integration/payment/">
      <OrderDate>2017-10-15</OrderDate>
      <ServiceID xmlns="http://dom.gosuslugi.ru/schema/integration/account-base/">00АА188890-02</ServiceID>
      <Amount>12.26</Amount>
      <d2p1:TransportGUID>d6b15d0d-d07a-4276-8fec-741ab86aa095</d2p1:TransportGUID>
    </SupplierNotificationOfOrderExecution>
    <SupplierNotificationOfOrderExecution xmlns="http://dom.gosuslugi.ru/schema/integration/payment/">
      <OrderDate>2017-10-15</OrderDate>
      <ServiceID xmlns="http://dom.gosuslugi.ru/schema/integration/account-base/">00АА188890-02</ServiceID>
      <Amount>5723.50</Amount>
      <d2p1:TransportGUID>14b8bf05-e819-4ce8-8999-0b5ca68c6235</d2p1:TransportGUID>
    </SupplierNotificationOfOrderExecution>
    <SupplierNotificationOfOrderExecution xmlns="http://dom.gosuslugi.ru/schema/integration/payment/">
      <OrderDate>2017-10-15</OrderDate>
      <ServiceID xmlns="http://dom.gosuslugi.ru/schema/integration/account-base/">00АА188890-02</ServiceID>
      <Amount>6517.50</Amount>
      <d2p1:TransportGUID>fd36c715-1eb0-482b-9ab7-770cae8a5008</d2p1:TransportGUID>
    </SupplierNotificationOfOrderExecution>
  </importSupplierNotificationsOfOrderExecutionRequest>
</importSupplierNotificationsOfOrderExecutionRequest1>
PaymentDocument или PaymentDocument[] в этой операции вообще не участвуют, откуда оно их вытащило?
Это сгенерированный утилькой SvcUtil.exe класс получился кривой чтоли?

Добавлено через 17 часов 21 минуту
Видимо да, генератор не осилил сгенерировать рабочий код
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xs:complexType>
                                <xs:sequence>
                                    <xs:element name="Charge" maxOccurs="unbounded">
                                        <xs:annotation>
                                            <xs:documentation>Сведения о начислении (для поиска по номерам лицевых счетов и адресу)</xs:documentation>
                                        </xs:annotation>
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element ref="tns:PaymentDocument" minOccurs="0" maxOccurs="unbounded"/>
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
и сделал двумерный массив.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private PaymentDocument[][]chargeField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlArrayAttribute(Order=0)]
        [System.Xml.Serialization.XmlArrayItemAttribute("PaymentDocument", typeof(PaymentDocument), IsNullable=false)]
        public PaymentDocument[][]Charge
        {
            get
            {
                return this.chargeField;
            }
            set
            {
                this.chargeField = value;
                this.RaisePropertyChanged("Charge");
            }
        }
Как тут подсказали, переделал на одномерный.

Добавлено через 39 минут
Если у кого-то есть предположения как на будущее можно избавиться от ручного редактирования сгенерированных классов, завел отдельную тему.
0
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 12
08.05.2018, 07:57
удали в сгенерированном PaymentsService одни ковычки (PaymentDocument[][] -> PaymentDocument[])
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
08.05.2018, 10:58
Это я и сделал, хочется чтобы оно сразу правильно генерировало,
а то потом могу и забывать, когда очередную версию надо поставить.
0
0 / 0 / 0
Регистрация: 23.01.2018
Сообщений: 50
08.05.2018, 13:28
Подскжите, пожалуйста. Тут все продолжаю добивать любимый всеми(ага) Гис и возникла очередная трабла. Пытаюсь повести (importNotificationsOfOrderExecution), а в ответ ошибка "[AUT011009]: Операция не разрешена". Что за чудо архитектурной мысли на этот раз?)
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
08.05.2018, 14:40
Цитата Сообщение от all_radio Посмотреть сообщение
importNotificationsOfOrderExecution
Это для банков и прочих платежных агентов.
Для обычных поставщиков информации надо использовать importSupplierNotificationsOfOrderExecut ion
0
0 / 0 / 0
Регистрация: 23.01.2018
Сообщений: 50
11.05.2018, 10:38
"[INT002000]: Значение в поле HSType отсутствует в реестре."
Вот еще такая трабла. Пытаемся сквитировать оплаты. Берем значение из справочника, а в итоге вот такое.

Добавлено через 53 минуты
Вот еще такой вопрос, на тему, а как это работает.
Приходит платежный документ на лицевой счет. В общем, как оператор капремонта узнает об оплате и как это квитируется. Немного мутная тема для нас

Добавлено через 19 часов 45 минут
А еще в ЛК не могу попасть на страницу справочников из-за прав доступа. Это как то связано с первой ошибкой?
0
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
12.05.2018, 10:32
Поделитесь примером отправки нескольких платежных документов с несколькими услугами пожалуйста...
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
14.05.2018, 11:31
foxwizard, Пример xml нужен?
0
16 / 15 / 1
Регистрация: 18.04.2016
Сообщений: 82
14.05.2018, 12:06
muf, не . C# желательно. Всегда мне твоя помощь помогает сохранить пару тысяч нервных клеток :-)
0
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
14.05.2018, 15:07
Кто нить знает, что у нас сегодня весь день туннель отвечает:

2018.05.14 19:05:11 LOG4[19784:6116]: VERIFY ERROR: depth=0, error=unable to get local issuer certificate
2018.05.14 19:05:11 LOG4[19784:6116]: VERIFY ERROR: subject=/C=RU/ST=77 \xD0\xB3.\xD0\x9C\xD0\xBE\xD1\x81\xD0\xB A\xD0\xB2\xD0\xB0/L=\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\x B2\xD0\xB0/street=\xD0\x92\xD0\xB0\xD1\x80\xD1\x88\ xD0\xB0\xD0\xB2\xD1\x81\xD0\xBA\xD
2018.05.14 19:05:11 LOG7[19784:6116]: SSL alert (write): fatal: unknown CA
2018.05.14 19:05:11 LOG3[19784:6116]: SSL_connect: 14090086: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:cer tificate verify failed

Сертификаты в гисе что ли обновили? Где взять новые?
Отсюда не подходят: Регламент и форматы информационного взаимодействия внешних информационных систем с ГИС ЖКХ (текущие форматы) v.11.11.0.15)
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
14.05.2018, 15:11
Кусок моего говнокода.
На несовпадающие скобки не обращать внимания, вырезал куски за несколько раз, может лишние где-то или не хватает. На нелогичность или избыточность кода в некоторых местах тоже не обращать внимания, из-за внутренней специфики кое-что приходилось делать через одно место.
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
                            short year = Convert.ToInt16(db_year);
 
  List<importPaymentDocumentRequestPaymentDocument> paymentDocuments = new List<importPaymentDocumentRequestPaymentDocument>();
                            Hashtable paymentInformations = new Hashtable();
                            importPaymentDocumentRequestPaymentInformation paymentInformation;
                            importPaymentDocumentRequestPaymentDocument paymentDocument;
 
 
 while (docsListReader.Read())
                            {
 paymentDocument = new importPaymentDocumentRequestPaymentDocument();
 
                                paymentDocument.ItemElementName = Infrastructure.BillsService.ItemChoiceType4.Expose;
                                paymentDocument.Item = true;
List<object> paymentDocumentItems = new List<object>();
  Infrastructure.BillsService.CapitalRepairImportType caprem = null;
 bool hasPeni = false;
 
  if (!paymentInformations.ContainsKey(docsListReader["operatingAccountNumber"].ToString()))
                                    {
                                        paymentInformation = new importPaymentDocumentRequestPaymentInformation();
                                        paymentInformation.TransportGUID = CommonUtils.LanitGuid(Guid.NewGuid());
                                        paymentInformation.BankBIK = docsListReader["BankBIK"].ToString();
                                        paymentInformation.operatingAccountNumber = docsListReader["operatingAccountNumber"].ToString();
                                        paymentInformations.Add(docsListReader["operatingAccountNumber"].ToString(), paymentInformation);
                                    }
 paymentInformation = (importPaymentDocumentRequestPaymentInformation)paymentInformations[docsListReader["operatingAccountNumber"].ToString()];
OleDbDataReader docsDataReader = commandGetDocData.ExecuteReader();
while (docsDataReader.Read())
                                {
  paymentDocument.AccountGuid = CommonUtils.LanitGuid(docsDataReader["AccountGUID"].ToString());
                                    paymentDocument.PaymentDocumentNumber = docsDataReader["PaymentDocumentNumber"].ToString();
  paymentDocument.PaymentInformationKey = paymentInformation.TransportGUID;
                                    paymentDocument.AdvanceBllingPeriod = (decimal)docsDataReader["AdvanceBillingPeriod"];
                                    paymentDocument.AdvanceBllingPeriodSpecified = true;
                                    paymentDocument.DebtPreviousPeriods = (decimal)docsDataReader["DebtPreviousPeriods"];
                                    paymentDocument.DebtPreviousPeriodsSpecified = true;
  if (docsDataReader["PaymentsTaken"] != DBNull.Value)
                                    {
                                        paymentDocument.PaymentsTaken = Convert.ToSByte(docsDataReader["PaymentsTaken"]);
                                        paymentDocument.PaymentsTakenSpecified = true;
                                    }
                                    else paymentDocument.PaymentsTakenSpecified = false;
 
                                    paymentDocument.TotalPayableByPDSpecified = true;
                                    paymentDocument.TotalPayableByPD = (decimal)docsDataReader["TotalPayableByPD"];
                                    paymentDocument.TotalPayableByPDWithDebtAndAdvance = (decimal)docsDataReader["TotalPayableByPD"] + (decimal)docsDataReader["DebtPreviousPeriods"];
                                    paymentDocument.TotalPayableByPDWithDebtAndAdvanceSpecified = true;
                                    isDataAvailable = true;
 
if ((bool)docsDataReader["HasChargeInfo"])
                                    {
                                        Infrastructure.BillsService.PaymentDocumentTypeChargeInfo chargeinfo = new Infrastructure.BillsService.PaymentDocumentTypeChargeInfo();
 
                                        paymentDocumentItems.Add(chargeinfo);
 switch (docsDataReader["RegistryNumber"].ToString())
                                        {
                                            case "50":     //
                                                Infrastructure.BillsService.PDServiceChargeTypeHousingService chargeitem = new Infrastructure.BillsService.PDServiceChargeTypeHousingService();
                                                chargeinfo.Item = chargeitem;
                                                chargeitem.AccountingPeriodTotal = (decimal)docsDataReader["AccountingPeriodTotal"];
                                                chargeitem.Rate = (decimal)docsDataReader["Rate"];
                                                chargeitem.ServiceType = new Infrastructure.BillsService.nsiRef();
                                                chargeitem.ServiceType.Code = docsDataReader["NsiCode"].ToString();
                                                chargeitem.ServiceType.GUID = CommonUtils.LanitGuid(docsDataReader["NsiGuid"].ToString());
                                                chargeitem.TotalPayable = (decimal)docsDataReader["TotalPayable"];
                                                chargeitem.ServiceCharge = new Infrastructure.BillsService.ServiceChargeImportType();
                                                chargeitem.ServiceCharge.MoneyDiscountSpecified = false;
 
                                                if ((decimal)docsDataReader["MoneyRecalculation"] != 0)
                                                {
                                                    chargeitem.ServiceCharge.MoneyRecalculationSpecified = true;
                                                    chargeitem.ServiceCharge.MoneyRecalculation = (decimal)docsDataReader["MoneyRecalculation"];
 
                                                }
                                                else chargeitem.ServiceCharge.MoneyRecalculationSpecified = false;
                                              
                                                break;
                                            case "1":
                                                Infrastructure.BillsService.PDServiceChargeTypeAdditionalService chargeitema = new Infrastructure.BillsService.PDServiceChargeTypeAdditionalService();
                                                chargeinfo.Item = chargeitema;
                                                chargeitema.AccountingPeriodTotal = (decimal)docsDataReader["AccountingPeriodTotal"];
                                                chargeitema.Rate = (decimal)docsDataReader["Rate"];
                                                chargeitema.ServiceType = new Infrastructure.BillsService.nsiRef();
                                                chargeitema.ServiceType.Code = docsDataReader["NsiCode"].ToString();
                                                chargeitema.ServiceType.GUID = CommonUtils.LanitGuid(docsDataReader["NsiGuid"].ToString());
                                                chargeitema.TotalPayable = (decimal)docsDataReader["TotalPayable"];
                                                chargeitema.ServiceCharge = new Infrastructure.BillsService.ServiceChargeImportType();
                                                chargeitema.ServiceCharge.MoneyDiscountSpecified = false;
                                                if ((decimal)docsDataReader["MoneyRecalculation"] != 0)
                                                {
                                                    chargeitema.ServiceCharge.MoneyRecalculationSpecified = true;
                                                    chargeitema.ServiceCharge.MoneyRecalculation = (decimal)docsDataReader["MoneyRecalculation"];
 
                                                }
                                                else chargeitema.ServiceCharge.MoneyRecalculationSpecified = false;
                                                if (docsDataReader["Consumption_I"] != DBNull.Value)
                                                {
                                                    chargeitema.Consumption = new Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolume[1];
                                                    chargeitema.Consumption[0] = new Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolume();
                                                    chargeitema.Consumption[0].typeSpecified = true;
                                                    chargeitema.Consumption[0].type = Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolumeType.I;
                                                    chargeitema.Consumption[0].Value = (decimal)docsDataReader["Consumption_I"];
 
                                                }
                                                else
                                                     if (docsDataReader["Consumption_O"] != DBNull.Value)
                                                {
                                                    chargeitema.Consumption = new Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolume[1];
                                                    chargeitema.Consumption[0] = new Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolume();
                                                    chargeitema.Consumption[0].typeSpecified = true;
                                                    chargeitema.Consumption[0].type = Infrastructure.BillsService.PDServiceChargeTypeAdditionalServiceVolumeType.O;
                                                    chargeitema.Consumption[0].Value = (decimal)docsDataReader["Consumption_O"];
                                                }
 
                                                break;
                                            case "51":
                                                Infrastructure.BillsService.PDServiceChargeTypeMunicipalService chargeitemk = new Infrastructure.BillsService.PDServiceChargeTypeMunicipalService();
                                                chargeinfo.Item = chargeitemk;
                                                chargeitemk.AccountingPeriodTotal = (decimal)docsDataReader["AccountingPeriodTotal"];
                                                chargeitemk.Rate = (decimal)docsDataReader["Rate"];
                                                chargeitemk.ServiceType = new Infrastructure.BillsService.nsiRef();
                                                chargeitemk.ServiceType.Code = docsDataReader["NsiCode"].ToString();
                                                chargeitemk.ServiceType.GUID = CommonUtils.LanitGuid(docsDataReader["NsiGuid"].ToString());
                                                chargeitemk.TotalPayable = (decimal)docsDataReader["TotalPayable"];
                                                chargeitemk.ServiceCharge = new Infrastructure.BillsService.ServiceChargeImportType();
                                                chargeitemk.ServiceCharge.MoneyDiscountSpecified = false;
 
                                                if ((decimal)docsDataReader["MoneyRecalculation"] != 0)
                                                {
                                                    chargeitemk.ServiceCharge.MoneyRecalculationSpecified = true;
                                                    chargeitemk.ServiceCharge.MoneyRecalculation = (decimal)docsDataReader["MoneyRecalculation"];
 
                                                }
                                                else chargeitemk.ServiceCharge.MoneyRecalculationSpecified = false;
 
                                                if (docsDataReader["individualConsumptionCurrentValue"] != DBNull.Value)
                                                {
                                                    chargeitemk.ServiceInformation = new Infrastructure.BillsService.ServiceInformation();
                                                    chargeitemk.ServiceInformation.individualConsumptionCurrentValue = (decimal)docsDataReader["individualConsumptionCurrentValue"];
                                                    chargeitemk.ServiceInformation.individualConsumptionCurrentValueSpecified = true;
 
                                                }
                                                //   else { chargeitemk.ServiceInformation.individualConsumptionCurrentValueSpecified = false; }
 
                                                if (docsDataReader["Consumption_I"] != DBNull.Value || docsDataReader["Consumption_O"] != DBNull.Value)
                                                {
                                                    chargeitemk.Consumption = new Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolume[1];
                                                    chargeitemk.Consumption[0] = new Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolume();
                                                    chargeitemk.Consumption[0].typeSpecified = false;
                                                    chargeitemk.Consumption[0].determiningMethodSpecified = false;
                                                    if (docsDataReader["Consumption_I"] != DBNull.Value)
                                                        chargeitemk.Consumption[0].Value = (decimal)docsDataReader["Consumption_I"];
                                                    else
                                                        if (docsDataReader["Consumption_O"] != DBNull.Value)
                                                    {
                                                        chargeitemk.Consumption[0].Value = (decimal)docsDataReader["Consumption_O"];
 
                                                    }
                                                    else chargeitemk.Consumption[0].Value = 0;
                                                    if (docsDataReader["MU_determiningMethod"] != DBNull.Value)
                                                    {
                                                        chargeitemk.Consumption[0].determiningMethodSpecified = true;
                                                        if (docsDataReader["MU_determiningMethod"].ToString().CompareTo("N") == 0)
                                                            chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.N;
                                                        else
                                                        if (docsDataReader["MU_determiningMethod"].ToString().CompareTo("M") == 0)
                                                            chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.M;
                                                        else
                                                        if (docsDataReader["MU_determiningMethod"].ToString().CompareTo("O") == 0)
                                                            chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.O;
                                                        else chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.M;
                                                    }
                                                    else
                                                    if (docsDataReader["individualConsumptionCurrentValue"] != DBNull.Value)
                                                    {
                                                        chargeitemk.Consumption[0].determiningMethodSpecified = true;
                                                        chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.M;
 
                                                    }
                                                    else
                                                    {
                                                        if (docsDataReader["Consumption_I"] != DBNull.Value)
                                                        {
                                                            chargeitemk.Consumption[0].determiningMethod = Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceVolumeDeterminingMethod.N;
 
                                                            chargeitemk.Consumption[0].determiningMethodSpecified = true;
                                                        }
                                                    }
 
 
 
                                                }
  if (docsDataReader["MunicipalServiceIndividualConsumptionPayable"] != DBNull.Value)
                                                {
                                                    chargeitemk.MunicipalServiceIndividualConsumptionPayable = (decimal)docsDataReader["MunicipalServiceIndividualConsumptionPayable"];
                                                    chargeitemk.MunicipalServiceIndividualConsumptionPayableSpecified = true;
                                                }
                                                else chargeitemk.MunicipalServiceIndividualConsumptionPayableSpecified = false;
 
                                                if (docsDataReader["MunicipalServiceCommunalConsumptionPayable"] != DBNull.Value)
                                                {
                                                    chargeitemk.MunicipalServiceCommunalConsumptionPayable = (decimal)docsDataReader["MunicipalServiceCommunalConsumptionPayable"];
                                                    chargeitemk.MunicipalServiceCommunalConsumptionPayableSpecified = true;
                                                }
                                                else chargeitemk.MunicipalServiceCommunalConsumptionPayableSpecified = false;
                                                if (docsDataReader["MultiplyingFactorRatio"] != DBNull.Value)
                                                {
                                                    chargeitemk.MultiplyingFactor = new Infrastructure.BillsService.PDServiceChargeTypeMunicipalServiceMultiplyingFactor();
                                                    chargeitemk.MultiplyingFactor.Ratio = (decimal)docsDataReader["MultiplyingFactorRatio"];
                                                    if (docsDataReader["MultiplyingFactorAmountOfExcessFees"] != DBNull.Value)
                                                    {
                                                        chargeitemk.MultiplyingFactor.AmountOfExcessFeesSpecified = true;
                                                        chargeitemk.MultiplyingFactor.AmountOfExcessFees = (decimal)docsDataReader["MultiplyingFactorAmountOfExcessFees"];
                                                    }
                                                }
 
                                                break;
                                        }
  if ((bool)docsDataReader["HasPACCInfo"])
                                    {
                                        hasPeni = true;
 
 
                                    }
 
                                }
                           
                               docsDataReader.Close();
1
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
14.05.2018, 17:34
продолжение, весь код не влез из-за ограничений на количество символов.
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
  if (caprem == null)
                                {
 
 
                                    caprem = new Infrastructure.BillsService.CapitalRepairImportType();
 
                                
 
                                    OleDbDataReader kapDataReader = commandGetKapData.ExecuteReader();
                                    while (kapDataReader.Read())
                                    {
                                        if (kapDataReader["KR_AccountingPeriodTotal"] == DBNull.Value &&
                                           kapDataReader["KR_Contribution"] == DBNull.Value &&
                                           kapDataReader["KR_MoneyRecalculation"] == DBNull.Value &&
                                           kapDataReader["KR_MoneyDiscount"] == DBNull.Value &&
                                           kapDataReader["KR_TotalPayable"] == DBNull.Value
                                           )
                                            break;
 
                                        if (!paymentInformations.ContainsKey(kapDataReader["operatingAccountNumber"].ToString()))
                                        {
                                            paymentInformation = new importPaymentDocumentRequestPaymentInformation();
                                            paymentInformation.TransportGUID = CommonUtils.LanitGuid(Guid.NewGuid());
                                            paymentInformation.BankBIK = kapDataReader["BankBIK"].ToString();
                                            paymentInformation.operatingAccountNumber = kapDataReader["operatingAccountNumber"].ToString();
                                            paymentInformations.Add(kapDataReader["operatingAccountNumber"].ToString(), paymentInformation);
                                        }
                                        if ((bool)kapDataReader["HasPACCInfo"])
                                        {
                                            hasPeni = true;
 
 
                                        }
                                        if (!isDataAvailable) //В секции данных платежа не было записей, когда отдельная квитанция на капремонт
                                        {
                                            paymentInformation = (importPaymentDocumentRequestPaymentInformation)paymentInformations[kapDataReader["operatingAccountNumber"].ToString()];
                                            paymentDocument.AccountGuid = CommonUtils.LanitGuid(kapDataReader["AccountGUID"].ToString());
                                            paymentDocument.PaymentDocumentNumber = kapDataReader["PaymentDocumentNumber"].ToString();
                                            tbillitem.gis_occupations_id = (int)kapDataReader["gis_occupations_id"];
                                            paymentDocument.PaymentInformationKey = paymentInformation.TransportGUID;
                                            paymentDocument.AdvanceBllingPeriod = (decimal)kapDataReader["AdvanceBillingPeriod"];
                                            paymentDocument.AdvanceBllingPeriodSpecified = true;
                                            paymentDocument.DebtPreviousPeriods = (decimal)kapDataReader["DebtPreviousPeriods"];
                                            paymentDocument.DebtPreviousPeriodsSpecified = true;
                                            if (kapDataReader["PaymentsTaken"] != DBNull.Value)
                                            {
                                                paymentDocument.PaymentsTaken = Convert.ToSByte(kapDataReader["PaymentsTaken"]);
                                                paymentDocument.PaymentsTakenSpecified = true;
                                            }
                                            else paymentDocument.PaymentsTakenSpecified = false;
 
                                            paymentDocument.TotalPayableByPDSpecified = false;
                                          
                                            paymentDocument.TotalPayableByPDWithDebtAndAdvance = (decimal)kapDataReader["TotalPayableByPDWithDebtAndAdvance"]; // + (decimal)kapDataReader["DebtPreviousPeriods"];
                                            paymentDocument.TotalPayableByPDWithDebtAndAdvanceSpecified = true;
                                           
 
                                        }
 
                                        
                                        caprem.AccountingPeriodTotal = Decimal.Round((decimal)kapDataReader["KR_AccountingPeriodTotal"], 2) + 0.00M;                                     
                                        caprem.Contribution = Decimal.Round((decimal)kapDataReader["KR_Contribution"], 2) + 0.00M;                                       
                                        caprem.MoneyRecalculation = (decimal)kapDataReader["KR_MoneyRecalculation"];                                       
                                        caprem.MoneyDiscount = (decimal)kapDataReader["KR_MoneyDiscount"];                                        
                                        caprem.TotalPayable = Decimal.Round((decimal)kapDataReader["KR_TotalPayable"], 2) + 0.00M;
                                        paymentDocumentItems.Add(caprem);
                                        break;
                                    }
                                    kapDataReader.Close();
 
                                }
 if (hasPeni)
                                {
                                    Infrastructure.BillsService.PaymentDocumentTypePenaltiesAndCourtCosts peni = new Infrastructure.BillsService.PaymentDocumentTypePenaltiesAndCourtCosts();
                                  
 
                                    OleDbDataReader peniDataReader = commandGetPeniData.ExecuteReader();
                                    while (peniDataReader.Read())
                                    {
                                        peni.Cause = peniDataReader["Cause"].ToString();
                                        peni.ServiceType = new Infrastructure.BillsService.nsiRef();
                                        peni.ServiceType.Code = peniDataReader["ServiceType_code"].ToString();
                                        peni.ServiceType.GUID = CommonUtils.LanitGuid(peniDataReader["ServiceType_guid"].ToString());
                                        peni.TotalPayable = (decimal)peniDataReader["TotalPayable"];
 
                                    }
                                    peniDataReader.Close();
                                    paymentDocumentItems.Add(peni);
                                }
                                if (paymentDocumentItems.Count > 0)
                                {
                                    paymentDocument.Items = paymentDocumentItems.ToArray();
                                    paymentDocuments.Add(paymentDocument);
                                }
}
 
  docsListReader.Close();
 
 while (paymentDocuments.Count() > 0) ////  надо нарезать на куски не более 1000 за раз
                            {
                                List<object> requestItems = new List<object>();
                                requestItems.Add(true); //ConfirmAmountsCorrect
                                requestItems.Add(fin_month);
                                requestItems.Add(year);
                                requestItems.AddRange(paymentInformations.Values.Cast<object>());
 
                                requestItems.AddRange(paymentDocuments.Take(Math.Min(1000, paymentDocuments.Count())));
 
                                requestImportPaymentData.importPaymentDocumentRequest.Items = requestItems.ToArray();
 
                                //отправляем и запоминаем
                                requestImportPaymentData.RequestHeader.MessageGUID = CommonUtils.LanitGuid(Guid.NewGuid());
                                requestImportPaymentData.RequestHeader.Date = DateTime.Now;
                                requestImportPaymentData.RequestHeader.Item = CommonUtils.LanitGuid(orgppaguid);
 
 asyncResponse = null;
                                bool errorBreak = false;
                                while (true)
                                {
                                    try
                                    {
                                        asyncResponse = service.importPaymentDocumentData(requestImportPaymentData);
                                        break;
                                    }
                                    catch (System.ServiceModel.FaultException ex)
                                    {
                                        errorBreak = true;
                                        AddLogMessage("Ошибка SOAP asyncResponse  - " + ex.Message, 1);
 
                                        break;
                                    }
                                    catch (Exception ex)
                                    {
                                        AddLogMessage("Ошибка asyncResponse  " + ex.Message, 1);
                                    }
                                    Thread.Sleep(1000);
                                
 
                                }
  if (!errorBreak)
                                {
                                    StateRequestData stateRequestData = new StateRequestData();
                                    stateRequestData.messageGuid = new Guid(asyncResponse.AckRequest.Ack.MessageGUID);
                                    stateRequestData.requestMessageGuid = new Guid(requestImportPaymentData.RequestHeader.MessageGUID);
                                    stateRequestData.ppaGuid = ppaguid;
                                    stateRequestData.description = descr;
                                    transportDispatcher.stateRequestDataList.Add(stateRequestData);
                                    foreach (var reqitem in requestItems)
                                    {
                                        if (reqitem is importPaymentDocumentRequestPaymentDocument)
                                        {
                                            transportDispatcher.GetItemByTransportGuid(((importPaymentDocumentRequestPaymentDocument)reqitem).TransportGUID).stateRequestData = stateRequestData;
                                        }
                                    }
                                }
                                paymentDocuments.RemoveRange(0, Math.Min(1000, paymentDocuments.Count()));
                            }// while (.Count() > 0)
 
//--------------------------Отправлены, теперь получить ответ
 
 
bool emergencyExit = false;
            int sleepInterval = 1000;
            Infrastructure.BillsService.getStateResponse stateresult = new Infrastructure.BillsService.getStateResponse();
            int cnt = 0;
            int sleepIntervalStates = 1000;
            while (true)
            {
             
                try
                {
                    int index = 0;
                    while (index < transportDispatcher.stateRequestDataList.Count)
                    {
                        var stateReq = transportDispatcher.stateRequestDataList[index];
 
 
                        Infrastructure.BillsService.getStateRequest1 stateRequest = new Infrastructure.BillsService.getStateRequest1()
                        {
                            RequestHeader = new Infrastructure.BillsService.RequestHeader
                            {
                                Date = DateTime.Now,
                                MessageGUID = CommonUtils.LanitGuid(Guid.NewGuid()),
                                ItemElementName = Infrastructure.BillsService.ItemChoiceType3.orgPPAGUID,
                                Item = CommonUtils.LanitGuid(stateReq.ppaGuid),
 
                                IsOperatorSignature = true,
                                IsOperatorSignatureSpecified = true
                            },
                            getStateRequest = new Infrastructure.BillsService.getStateRequest
                            {
                                MessageGUID = CommonUtils.LanitGuid(stateReq.messageGuid)
                            }
                        };
 
 
                        stateRequest.RequestHeader.Date = DateTime.Now;
                        stateRequest.RequestHeader.MessageGUID = CommonUtils.LanitGuid(Guid.NewGuid());
 
                        try
                        {
                            stateresult = service.getState(stateRequest);
                        }
                        catch (System.ServiceModel.FaultException ex)
                        {
                            AddLogMessage("Ошибка SOAP - " + ex.Message + "  " + stateReq.description, 1);
 
                        }
 if (stateresult.getStateResult.RequestState == 3)
                        { if ((stateresult.getStateResult.Items[0] is Infrastructure.BillsService.ErrorMessageType))
                            {
                                AddLogMessage("Ошибка MessageGuid=" + CommonUtils.LanitGuid(stateReq.requestMessageGuid) + " " + ((Infrastructure.BillsService.ErrorMessageType)stateresult.getStateResult.Items[0]).ErrorCode +
                                      " " + ((Infrastructure.BillsService.ErrorMessageType)stateresult.getStateResult.Items[0]).Description, 1);
                                AddLogMessage(((Infrastructure.BillsService.ErrorMessageType)stateresult.getStateResult.Items[0]).StackTrace, 1);
 
 
                            }
                            transportDispatcher.stateRequestDataList.RemoveAt(index);
                            transportDispatcher.ProcessImportResultBills(stateresult.getStateResult.Items);
 
                        }
                        else Thread.Sleep(sleepIntervalStates);
                        ///////////////////////----------------------------
                        ////////////////////////////////////
                        index++;
                        if (transportDispatcher.stateRequestDataList.Count == 0) { break; }
                    }
                    if (transportDispatcher.stateRequestDataList.Count == 0)
                    {
                        AddLogMessage("Завершена загрузка статусов обработки переданных начислений - "); break;
                    }
                }
Добавлено через 8 минут
kevinlexus,
А может какой-то промежуточный сертификат цепочки удостоверяющих центров не действителен,
о чем и говорит сообщение error=unable to get local issuer certificate
Впрочем, я тунелем не пользуюсь и отключил проверку серверного сертификата.

Добавлено через 2 часа 14 минут
Похоже, действительно, у них в сертификате что-то закончилось, сейчас прислали новый.
1
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
14.05.2018, 18:08
Ничего не понимаю.

Беру сертификат ГИСа, CA-PPAK.pem (скачиваю с dom.gosuslugi.ru)

Проверяю этим сервисом:
https://www.gosuslugi.ru/pgu/eds/order

Пишет:

Подлинность сертификата НЕ ПОДТВЕРЖДЕНА

Статус сертификата, использованного для подтверждения подлинности ЭП: Сертификат был выдан не аккредитованным УЦ/не доверенным УЦ

Статусы использованных сертификатов

Владелец : CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU, support@cryptopro.ru

Издатель: CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU, support@cryptopro.ru

Действителен: с 2014.08.05 по 2019.08.05

Статус: Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.

При этом сертификат моей организации проверяется и сообщает, что корректный.
0
32 / 30 / 0
Регистрация: 21.10.2016
Сообщений: 187
15.05.2018, 07:37
С этих версий?
В открытой части портала ГИС ЖКХ в разделе "Регламенты и инструкции" обновлены архивы с форматами обмена версии 11.12.0.10.1 и 11.11.0.15.

Обновлен файл CA-PPAK.pem
Если это не помогает, то тогда в ТП писать заявку.
0
1 / 1 / 0
Регистрация: 13.10.2016
Сообщений: 64
15.05.2018, 10:06
Цитата Сообщение от muf Посмотреть сообщение

Похоже, действительно, у них в сертификате что-то закончилось, сейчас прислали новый.
А прислали как? на почту? нам что то ничего не прислали))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2018, 10:06

.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. При срабатывании форматно-логического...


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

Или воспользуйтесь поиском по форуму:
520
Закрытая тема Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru