SOAP для чайников

05.09.18

Интеграция - WEB-интеграция

Немножко про SOAP сервис. И пример работы с подключением и получением данных по SOAP за 5 минут.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
SOAP для чайников.:
.cf 38,41Kb
92
92 Скачать (1 SM) Купить за 1 850 руб.

Постараюсь коротко и своими словами. SOAP сейчас весьма популярный протокол web API сервисов. То есть способ взаимодействия Вашей информационной системы через web с другими информационными системами.

В самом общем виде SOAP это протокол обмена структурированными XML сообщениями в произвольной распределенной вычислительной среде. Отсюда следует, что мы должны куда-то передать XML и получить назад также XML. Для передачи нам нужен транспорт. Или протокол передачи данных. Например  SMTP, FTP, HTTP, HTTPS. Чаще всего HTTP, но это не принципиально. 

Залогом успеха нашего обмена является способность правильно создать и передать XML запрос и правильно принять и разобрать XML ответ. Для того чтобы сделать все правильно нужно соблюдать (извиняюсь за тавтологию) правила. Эти правила описываются файлом специального формата: WSDL. WSDL - это язык описания правил использования web сервисов в том числе и сервиса SOAP.

Встроенный в 1С объект платформы WS-ссылка позволяет нам загрузить эти правила и на их основе использовать web сервис с максимальным удобством. Поставщик сервиса разрабатывает правила и размещает их по доступному для клиентов адресу. Естественно, что изменения в работе сервиса должны в случае необходимости сопровождаться внесением изменений в WSDL инструкцию. Но это не наша (клиента) забота. Для нас важны правила. Мы можем не иметь малейшего представления о том, как работает сервис, но точно знаем, что если обратимся к нему по правилам, то получим правильный ответ. Это сильно упрощает жизнь и разработку. Не знаю как Вам, а мне это нравится.

В общем-то объект WS-ссылки и создается и задается всего лишь ссылкой на WSDL правило:

 

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

Вызвав одной универсальной функцией нужный метод (предварительно создав и передав нужную ему структуру параметров) SOAP сервиса Вы уже можете видеть результат в виде дерева. Описание ответных данных как правило содержится в документации поставщика, но это не обязательно. В любом случае в качестве ответа Вы получите некую структуру данных в виде XML файла, которая в общем виде может быть приведена к типу данных 1С "ДеревоЗначений". Вот это-то дерево и будет у Вас при любом вызове любого метода. Вызовите в этот момент отладчик для просмотра или выведите дерево результата на форму и разберитесь с каких ветвей снять заветные "плоды"-результаты. И все:)

Вот как просто можно вызвать и получить результаты разных методов в абсолютно разных сервисах (во втором примере метод без параметров):

 

Но как и в жизни в методы SOAP тоже можно обозначить как процедуры и функции. Процедуру мне посчастливилось увидеть всего один раз. Да и то, потому что публичный сервис с информацией о странах, который я использовал в качестве примера №1 перестал работать (на скрине он еще показан) и пришлось свочно искать ему замену. Что же делать с процедурой, ведь она не вернет нам ответ и не из чего будет создать дерево и, следовательно, неоткуда сорвать результат?

Но (опять же как часто бывает в жизни) с процедурой все стало даже проще. Она возвращает результат в свои же параметры. Как на скрине ниже:

Так как ПолучитьДеревоРезультатовДляSOAP задумывалась как функция то я ее заставил вернуть результат. В данном случае, не деревом, а структурой, содержащей выходные парметры метода. Какие из параметров выходные Вы всегда можете просмотреть в их свойствах. Хотя можно и не смотреть. Структура в результате будет содержать все выходные параметры метода. В нашем примере это "image" и "encoding". Получить результат из структуры оказывается еще проще. Если с дерева нужно "доставать", то в структуре все уже готово к употреблению. 

В последний год мне довелось трижды связывать через web API свою конфигурацию с поставщиками услуг и информации, для получения данных или заказа услуг (например услуги доставки товара или рассылки СМС).  В последний раз имея готовый код примера и обработку для 1С от поставщика я отказался от них и выбрал вариантом решения универсальный SOAP сервис. Просто потому, что так оказалось с наработанными ранее функциями проще.

Для данной публикации специально нашел парочку публичных SOAP ресурсов и слепил использующую их конфигурацию. 95% времени заняла работа с формами вызова и вывода данных. Зато в демке Вы можете видеть курс валют от ЦБ РФ на любую дату и краткий набор сведений о любой стране мира скриншот web страницы для произвольного url.

В общем кому лень или некогда разбираться с этим вот всем, а нужно сделать быстро и чтобы работало ссылка на скачивание демо конфигурации после публикации.

И пункт обязательной программы:) Тестировалось на релизе платформы 8.3.9.2309.

Спасибо за внимание и удачных всем разработок!

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17802    19    22    

17

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19886    13    17    

17

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14437    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1208    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 🅵🅾️🆇 524 05.09.18 15:03 Сейчас в теме
Все здорово, но МЫЛО у 1с такое себе при взаимодействии с другими сервисами.
Зачастую удобнее и легче использовать http сервисы.
Они понятны любому разработчику, их легко разрабатывать и тестировать.
Alex_Iz; shumvlesu; ni032mas; +3 Ответить
2. awk 744 05.09.18 21:36 Сейчас в теме
(1)
Зачастую удобнее и легче использовать http сервисы.

Из статьи:
Для передачи нам нужен транспорт. Или протокол передачи данных. Например SMTP, FTP, HTTP, HTTPS. Чаще всего HTTP, но это не принципиально.


Причем тут протокол передачи данных? Может вы имели ввиду REST?

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


Я бы не был столь категоричен... Легко разрабатывать и тестировать то, что хорошо продумано и задокументировано, к конкретной технологии - это почти не имеет отношения.
DemetrKlim; +1 Ответить
3. agent00mouse 256 06.09.18 06:58 Сейчас в теме
(2)
Зачастую удобнее и легче использовать http сервисы.

Добавлю, даже на порядок удобнее, порог вхождения практически нулевой у HTTP сервисов по отношению к SOAP.
Статья образовательная ценность имеет однозначно. Автору пожелание, напиши ещё про полностью программную работу с SOAP объектами, не всегда есть возможность конфигурацию допиливать.
4. awk 744 06.09.18 09:24 Сейчас в теме
(3)
HTTP сервис


Будьте последовательны в своем невежестве, если произносите HTTP сервисы (как в 1С), то не SOAP, а WEB сервисы. Но корректно (что бы не выглядеть идиотом): REST и SOAP.
12. agent00mouse 256 10.09.18 06:43 Сейчас в теме
(4) Использую терминологию 1С.
5. 🅵🅾️🆇 524 06.09.18 16:33 Сейчас в теме
(2)

Причем тут протокол передачи данных? Может вы имели ввиду REST?

Может я имел ввиду объект метаданных 1с, который да, реализует RESTful.

Я бы не был столь категоричен... Легко разрабатывать и тестировать то, что хорошо продумано и задокументировано, к конкретной технологии - это почти не имеет отношения.

Буквально год назад КАТЕГОРИЧНО бросил использование Web сервисов после того, как оказалось, что при интеграции с яндексом они передают только один параметр (API проверки орфографии) и после беглого гуглинга оказалось, что в 1с оно работает нормально только с самой же 1с.
6. awk 744 07.09.18 09:20 Сейчас в теме
(5)
Буквально год назад КАТЕГОРИЧНО бросил использование Web сервисов после того, как оказалось, что при интеграции с яндексом они передают только один параметр (API проверки орфографии) и после беглого гуглинга оказалось, что в 1с оно работает нормально только с самой же 1с.


Я ничего не понял, кроме того, что были проблемы, и после рытья в гугл вы нашли оправдание, не продолжать работу. Что вы имели ввиду? Я с вами и вашими работами не знаком. Мысли читать не умею.
8. 🅵🅾️🆇 524 07.09.18 11:53 Сейчас в теме
(6)
Мысли читать не умею.


Ну попробуйте погуглить.
По первой же ссылке описание проблемы (не мой пост, если что):
https://www.forum.mista.ru/topic.php?id=538031

Для того, чтоб веб сервисы работали как надо, надо чтоб на обеих сторонах были либо 1с'ки, либо чтоб была возможность правок обоих ресурсов.

И так, спрашивается, ради чего это все, если есть менее геморройные альтернативы?
У вас может и другой подход, но лично мой: "сделал API, работает как автомат калашникова прошибающий рельсу вдоль, можно и забыть про него", а для этого он должен быть ммаксимально простым. Мне будет лень переписывать API, когда в компании решат прикрутить корпоративный портал или мобильное приложение или скуд или замутить обмены с контрагентом.

HTTP сервисы (помним, да, что это метаданные 1с реализующие REST API?) это суть аналог flask'а. Там нечему ломаться и работать неправильно. API будет понятно и питонистам и яваскриптерам и пхп-инвалидам и даже вашим собратьям по разуму.

вы нашли оправдание, не продолжать работу.

Работа была выполненна на отлично, как и всегда, но не средствами wsdl.
Если 1С никаких существенных изменений не вносила в этот механизм за последний год, то нужно с оглядкой подходить к подобным решениям.


ЗЫ: только прошу, без вот этого всего: "А НАМ И НЕ НАДО!!!", "ТОЛЬКО ВЫЙГРАЛИ!!!".
9. awk 744 07.09.18 15:38 Сейчас в теме
(8)
Для того, чтоб веб сервисы работали как надо, надо чтоб на обеих сторонах были либо 1с'ки, либо чтоб была возможность правок обоих ресурсов.
Чушь. Есть проблемы совместимости разных версий инструментов, но требования 1С - 1С или Java - Java, или WCF - WCF - нет.

Что такое: "правка общих ресурсов" - я даже не догадываюсь.

И так, спрашивается, ради чего это все, если есть менее геморройные альтернативы?
...
даже вашим собратьям по разуму.


Эээ.... Моим собратьям по разуму все равно что использовать: SOAP, CORBA, RMI и т.д., и т.п. Так что за себя рассказываете, я же за вас не рассказываю....

Я сервисы начал писать в 2007 году. И прикручивал их к 1С:7,7 еще. Проблемы были, но изучение вопроса помогало всегда их решать без смены технологии...
PLAstic; Vladimir Litvinenko; +2 Ответить
10. 🅵🅾️🆇 524 07.09.18 16:14 Сейчас в теме
(9) Писька у меня ничуть не короче, уж поверьте.

Чушь. Есть проблемы совместимости разных версий инструментов, но требования 1С - 1С или Java - Java, или WCF - WCF - нет.


Конечно работает, если у вас это транспорт для некого примитива или используете костыли (опять же, при условии, что у вас доступ есть обоим ресурсам).

А адекватным ребятам посоветую сначала хорошенько подумать зачем им оно, прежде чем выбирать Web сервисы вместо Http.
11. awk 744 07.09.18 17:14 Сейчас в теме
(10)
уж поверьте.
Вы тщательно это маскируете или я сильно не внимателен, а по вопросам веры - в церковь...
Конечно работает, если...
Я уже просил не говорить за меня.
А адекватным ребятам посоветую...
Советуйте... Главное не с дулом у виска, оставьте им свободу выбора...
13. yarsort 141 11.09.18 10:52 Сейчас в теме
(10) Фото просто угар.! :))))
25. dadel 19 22.10.21 13:33 Сейчас в теме
(8)Аналогично, как по ссылке написано в решении костыль делал. Обмен с ЭТП ГПБ пришлось делать и у них дата с таймзоной в некоторых датах обязательно должна отправляться. Приводить как не пытался, всё равно таймзону удаляет при формировании XML.
В итоге так же запросил схему WSDL от них, отредактировал тип дат, в которых возникает ошибка на тип стринг и уже нормально в виде строки отправлял с таймзоной им данные)
7. dusha0020 1117 07.09.18 09:34 Сейчас в теме
Всем привет. Ребята статью писал и готовил мучительно долго. Но перед отпуском решил закончить. Успел и уехал. Отвечу всем обязательно. Только когда вернусь:)
14. dusha0020 1117 17.09.18 15:23 Сейчас в теме
Из отпуска вышел, но дискуссия увяла:) Так что если кому, что надо - пишите для возобновления. Как - то уже совсем не интересно задирать тему снова без повода.
15. LookingFor 03.07.19 14:36 Сейчас в теме
(14) Добрый день!

Что за метод такой ПолучитьДеревоРезультатовДляSOAP?
16. dusha0020 1117 04.07.19 09:39 Сейчас в теме
(15) Ну вот такой метод, который позволяет просто отправить запрос и получить ответ в виде дерева значений для добавленного в конфигурацию Веб сервиса.
Когда я его написал и немного попользовался мне показалось хорошей идеей поделиться этим с сообществом. Впрочем, у Вас может быть иное мнение.
17. mat skywalker 8 29.08.19 11:21 Сейчас в теме
Вопросы возникли:
1. Если нужна авторизация? Где указывать пользователя и пароль?
2. {ОбщийМодуль.Служебный.Модуль(89)}: Ошибка при вызове метода контекста (Установить)
Данные.Установить(ТекСвойство,НужныйТип);
по причине:
Несоответствие типов XDTO:
Свойство является списковым
Выдает ошибку при попытке обращения к GetPartyByINN
Файл wsdl прикрепил.
Прикрепленные файлы:
Operations.xml
18. dusha0020 1117 30.08.19 14:38 Сейчас в теме
(17) 1. Вопрос авторизации остается открытым. В основном авторизация в web сервисах происходит через один/несколько передаваемых параметров. apikey, как в примере с сервисом СкринURL какой-нибудь токен и т.п. Мне вот ни разу не пришлось авторизовываться для подключения к сервису, авторизация была только внутри самого сервиса. Но если Вам нужно именно авторизоваться для подключения - посмотрите в сторону параметра ИнтерентПрокси при вызове метода СоздатьWSПрокси для Вашей ws ссылки.
2. Подозреваю, что в списке со свойствами есть еще списки свойств. Рекурсивное вычерпывание параметров у меня не предусмотрено. Любопытный у Вас сервис, но, боюсь, что мой способ сделать все по простому здесь не заработает.
19. user1516033 29.12.20 09:03 Сейчас в теме
SOUP это не протокол а технология
20. sashocq 193 30.08.21 15:28 Сейчас в теме
(19) Вообще-то SOUP — это блюдо
21. banzayka 1 02.09.21 15:45 Сейчас в теме
Подскажите, пожалуйста, грамотные люди. Нужно установить три параметра. С двумя параметрами Filter и OrderBy проблем нет, у них тип: string (http://www.w3.org/2001/XMLSchema).
А вот с третьим Field проблема. Его тип: ActivityFieldType (http://xmlns.oracle.com/Primavera/P6/WS/Activity/V1)
Сам тип ActivityFieldType имеет базовый тип: string (http://www.w3.org/2001/XMLSchema) с возможными значениями

В значение параметра пытаюсь вставить ОбъектXDTO 1) с типом string (http://www.w3.org/2001/XMLSchema); 2) с типом ActivityFieldType (http://xmlns.oracle.com/Primavera/P6/WS/Activity/V1); 3) СОздаю в string и делаю Привести в ActivityFieldType; 4) Просто текст вставляю
Ничего не помогает. :о(

При установке значения выдает ошибку "Несоответствие типов XDTO: Свойство является списковым".
Помогите...
Прикрепленные файлы:
22. banzayka 1 03.09.21 10:21 Сейчас в теме
(21) Спасибо всем. С этим вопросом разобрался.
Новый вопрос, с авторизацией.
Создаю прокси.
_WSПрокси = WSСсылки[WSСсылка].СоздатьWSПрокси(Сервис_ПространствоИмен, Сервис_Имя, ИмяПорта,,,,,Ложь);
Если дальше вообще для него не указывать логин и пароль, то при выполнении выдает ошибку:
При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: WSS header is missing from request. Can't do username token authentication
А если логин и пароль указать,
_WSПрокси .Пользователь = _Логин;
_WSПрокси .Пароль = _Пароль;


то ошибка такая:
При вызове веб-сервиса произошла ошибка. Аутентификация пользователя не выполнена.
Error 401--Unauthorized
From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
10.4.2 401 Unauthorized
The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.46) containing a challenge applicable to the requested resource...


Подскажите, где-то ещё воткнуть логин и пароль нужно?
23. dusha0020 1117 03.09.21 14:12 Сейчас в теме
(22)
СоздатьWSПрокси

Вот из СП:
СоздатьWSПрокси(<URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяПорта>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>, <Местоположение>, <ИспользоватьАутентификациюОС>)
Попробуйте передать в создание WS переменную ИнтернетПрокси
ИнтернетПрокси = Новый ИнтернетПрокси;
ИнтернетПрокси.Пользователь = _Логин;
ИнтернетПрокси.Пароль       = _Пароль;
24. banzayka 1 03.09.21 16:37 Сейчас в теме
(23)
Так я тоже пробовал. Картина, к сожалению, та же...
В SoapUI тоже помучался, пока удалось подключиться. А вот из 1С никак...
Прикрепленные файлы:
Оставьте свое сообщение