5.Сценарии асинхронного взаимодействия 5.1.Межведомственный запрос Упрощенно типовой сценарий межведомственного взаимодействия включает одно сообщение – запрос и одно сообщение – ответ (Рисунок ).
Рисунок – Типовой сценарий межведомственного взаимодействия (упрощенно)
Обмен сообщениями между ИС потребителя и ИС поставщика, реализуемый в СМЭВ, осуществляется путем вызова соответствующих методов веб-сервиса SMEVMessageExchangeService, предоставляемого СМЭВ. Веб-севис SMEVMessageExchangeService предоставляет восемь методов.
Пять методов используются для передачи запроса от ИС потребителя к ИС поставщика и ответа от ИС поставщика к ИС потребителя:
SendRequest (послать запрос), служит для передачи запроса от ИС потребителя в СМЭВ;
GetRequest (получить запрос), служит для получения запроса ИС поставщика из СМЭВ;
Ack (подтвердить получение), служит для подтверждения получения сообщения из очереди, должен вызываться после получения сообщения методами GetRequest или GetResponse;
SendResponse (послать ответ), служит для передачи ответа на запрос от ИС поставщика в СМЭВ;
GetResponse (получить ответ), служит для получения из СМЭВ ответа на запрос от ИС потребителя.
На протяжении жизненного цикла запрос (ответ на запрос) проходит ряд состояний (статусов). ИС потребителя и ИС поставщика могут получить статистику по состоянию своих очередей, вызвав метод GetIncomingQueueStatistics.
Далее на диаграмме (Рисунок ) представлена последовательность обращений к веб-сервису СМЭВ urn://x-artefacts-smev-gov-ru/services/message-exchange/1.2 (обращения к веб-сервису выделены полужирным шрифтом) при передаче запроса от ИС потребителя к ИС поставщика и ответа от ИС поставщика к ИС потребителя. На диаграмме также показаны наиболее важные действия, которые выполняются СМЭВ, ИС поставщика и ИС потребителя в промежутках между обращениями к веб-сервису СМЭВ.
Перед отправкой в СМЭВ запроса сведений ИС потребителя должна подготовить этот запрос. Подготовка запроса включает корректное заполнение блока структурированных данных запроса //SenderProvidedRequestData, в том числе блока сведений по форматам поставщика //MessagePrimaryContent (правильность заполнения элемента //MessagePrimaryContent будет потом проверяться в СМЭВ на соответствие схеме XSD и, при наличии, Schematron, разработанными поставщиком), добавление ЭП-ОВ для элемента //SenderProvidedRequestData и, при необходимости, добавление вложений (//AttachmentContentList и //AttachmentHeaderList).
Рисунок – Последовательность обращений к веб-сервису СМЭВ при передаче сообщений с запросами и ответами
Затем запрос сведений передается в СМЭВ с помощью метода SendRequest, в СМЭВ последовательно выполняется следующие операции:
форматно-логический контроль (далее - ФЛК) СМЭВ-конверта по схеме XSD. Под ФЛК понимается проверка формата данных, а также контроль логики заполнения данных, осуществляемые путем проверки соответствия этих данных документам на языке XSD и, при необходимости, Schematron (пример проверки: срок лишения специального права не может быть менее одного месяца и более трех лет). Как синоним ФЛК, в указанном значении, далее используется также термин валидация;
проверка ЭП-ОВ на предмет корректности и на предмет действительности соответствующих сертификатов ключей подписи. ЭП-ОВ также используется для идентификации потребителя сервиса, приславшего запрос;
валидация бизнес-данных по схеме XSD и, при наличии, Schematron, разработанными поставщиком сервиса. Также проверяется полное имя корневого элемента блока структурированных сведений //MessagePrimaryContent для идентификации ИС поставщика - получателя запроса;
проверка ЭП-СП (в элементе //PersonalSignature и в блоке заголовков вложений //AttachmentHeaderList);
помещение запроса в очередь запросов;
Запрос будет находиться в очереди запросов до тех пор, пока при очередном обращении в СМЭВ его не получит ИС поставщика. Для получения запроса ИС поставщика подготавливает и подписывает ЭП-ОВ обращение за запросом, а затем, вызвав метод GetRequest, передает это обращение в СМЭВ. СМЭВ по ЭП-ОВ идентифицирует ИС поставщика и, при наличии недоставленных запросов, возвращает в ИС поставщика очередной запрос, предварительно подписав его ЭП-СМЭВ.
Получив из СМЭВ запрос, ИС поставщика проверяет ЭП-СМЭВ и, в случае успешной проверки, сохраняет у себя этот запрос, а в СМЭВ передает подтверждение получения запроса путем вызова метода Ack. СМЭВ, получив от ИС поставщика подтверждение получения запроса снимает его с обработки, устанавливая ему внутренний признак «Обработан».
ИС поставщика, в свою очередь, готовит ответ на полученный запрос и, подписав его ЭП-ОВ, отправляет в СМЭВ путем вызова метода SendResponse. СМЭВ, получив ответ от ИС поставщика, выполняет с сообщением действия, аналогичные действиям при получении запроса от ИС потребителя, и помещает ответ в очередь ответов.
Затем ИС потребителя вызывает метод GetResponse и передает в СМЭВ подготовленный и подписанный ЭП-ОВ запрос очередного ответа. СМЭВ по ЭП-ОВ идентифицирует ИС потребителя и определяет, к каким очередям этот потребитель имеет доступ. Из соответствующей очереди СМЭВ выбирает очередной ответ, подписывает его ЭП-СМЭВ и передает в ИС потребителя. Так же как и ИС поставщика при получении запроса, ИС потребителя при получении ответа проверяет ЭП-СМЭВ, сохраняет у себя этот ответ и подтверждает получение ответа вызовом метода Ack. СМЭВ, получив от ИС потребителя подтверждение получения ответа, присваивает ответу внутренний признак «Обработан».
Следует также заметить, что все значимые события при обращении потребителя или поставщика в СМЭВ, от получения SOAP-запроса до отправки SOAP-ответа, фиксируются в журнале СМЭВ.
|