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

Предварительные условия
Созданы следующие элементы:
Внешний тип данных Инициирующий запрос для сценария с синхронным ответом
Тип данных Ответ в сценарии с синхронным ответом
Система-потребитель с типом Веб-сервис в сценарии синхронного ответа.
Система-потребитель с типом Веб-сервис в сценарии синхронного ответа инициирует процесс отправкой в Платформу сообщения с внешним типом Инициирующий запрос для сценария с синхронным ответом.
К Системе-потребителю с типом Веб-сервис в сценарии синхронного ответа привязан обработчик Запрос системы потребителя с типом Веб-сервис в сценарии с синхронным ответом.
Обработчик Запрос системы потребителя с типом Веб-сервис в сценарии с синхронным ответом
На вкладке В Platform добавлена переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
На вкладке Из Platform добавлена переменная ответ с типом Ответ в сценарии с синхронным ответом.
Описание процесса
Бизнес процесс «Процесс синхронного ответа»
Запускать автоматически: включено

Переменная обработки: переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
Добавлена переменная ответ с типом Ответ в сценарии с синхронным ответом и ошибка с типом Сообщение.

В схему обработки добавлены следующие шаги:
Шаг Отправка «ЗапросВGorest»
Обработчик: Запрос в систему-источник в сценарии с синхронным ответом
Тип получателя: Модуль
Получатель: Система-источник в сценарии с синхронным ответом
Ожидание: Ожидать ответа
Время ожидания: 10000(мс)

В локальных переменных шага добавлена переменная ид и произведен маппинг ид_запроса в переменной запрос для передачи значения идентификатора пользователя в параметры обработчика.

Для использования полученного ответа далее по цепочке схемы процесса, в шаге настроен маппинг полученного сообщения ОтветноеСообщение в переменную ответ на вкладке Результат выполнения

Система-источник данных: внешняя система с типом Веб-сервис Система-источник в сценарии с синхронным ответом (клиент), настроенная на тестовый сервис https://gorest.co.in/, предоставляющий ресурсы для тестирования REST API: отправляется запрос https://gorest.co.in/public/v2/users/5454462 , в котором значение 5454462 является идентификатором пользователя.
После обработки запроса сервис возвращает ответ со следующей структурой:
Система-источник в сценарии с синхронным ответом:
К Системе-источнику в сценарии с синхронным ответом привязан обработчик Запрос в систему источник в сценарии с синхронным ответом
Обработчик Запрос в систему источник в сценарии с синхронным ответом:
Шаг Отправка «Ответ»
Шаг Функция «ПробросОшибки»
Для возвращения ошибки в случае неуспешной отправки создана функция ПробросОшибки.
Во входных параметрах переменной Описание ошибки передается значение исключения в случае неуспешной отправки LastException. В выходных параметрах смапплена переменная Сообщение с переменной ошибка.


Функция ПробросОшибки:
Запускать автоматически: выключено (данная функция вызывается в бизнес процессе)
Добавлены переменные:
ОписаниеОшибки
кодОтвета
Сообщение
Код:
InitMessage.SetProperty(MessageProperties.ResponseMessage, ОписаниеОшибки); int index = ОписаниеОшибки.IndexOf("код ответа"); if (index != -1) { string substring = ОписаниеОшибки.Substring(index + "код ответа".Length).Trim(); if (!string.IsNullOrEmpty(substring)) { string statusCode = new string(substring.TakeWhile(char.IsDigit).ToArray()); //Logger.Debug(statusCode); кодОтвета = statusCode; } } InitMessage.SetProperty(MessageProperties.ResponseCode, кодОтвета);
Стандартный клиент, вызывающий метод с установленными переменными ResponseCode и ResponseMessage, получает соответствующий код ответа и ответное сообщение с описанием ошибки.
Шаг Отправка «Отправка ошибки получателю»
Сообщение: переменная ошибка
Тип получателя: Модуль
Получатель: InitSource
Ожидание: Ожидание не требуется
Это ответ: включено

Демо-пример
Успешная обработка сообщения
Действия пользователя:
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.
В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):
Код:
{ "body":"ewogICAgItC40LRf0LfQsNC/0YDQvtGB0LAiOjYyMjE3NTYKfQ==" }
Результат: ответ успешно получен.


Неуспешная обработка сообщения
Вариант 1: Обработка сообщения недопустимого формата
Действия пользователя:
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.
В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):
{ "ид_запроса":6221756 }
Результат:
[UnhandledException] An unhandled exception has occurred while executing the request. DT.Net.Exceptions.RequestException: Сообщение не передано

Вариант 2: Неуспешная обработка сообщения (истек таймаут)
Действия пользователя:
Открыть схему обработки Сценарий2СинхронныйОтвет.
Открыть параметры шага ЗапросВGorest и установить время ожидания ответа 1 мс.
Сохранить и применить схему.
Отправить запрос.
Результат:



Вариант 3: Некорректная структура запроса
Действия пользователя:
1. Передать в запросе несуществующий идентификатор пользователя. 3. Отправить запрос из Postman.
Результат:
В ЦМ Системы-источника будет зафиксировано событие о выполнении обработчика. Тестовый сервис не сможет разобрать структуру запроса и вернет ответ с кодом 404 и текстом ошибки.
