веб сервис 1с – обмен данными XML

У нас на предприятии, где я работаю, обмены данными между конфигурациями реализованы через веб-сервисы 1с, которые крутятся на IIS. Решил для сделать заметку, о том, как быстро и просто можно запрограммировать такой веб-сервис и обеспечить обмен данными любыми объектами конфигурации через XML! В интернете много информации, но как по мне, не хватает четкого и детального разбора! Здесь мы попробуем это исправить!

В конце статьи сможете скачать архив базы с веб-сервисом и обработку, которая из любой базы отправляет объект в виде ‘xml’ по веб-сервису!

Сразу уточню: сама оснастка через что будет работать веб-сервис должна уже быть настроена: ISS или Apache или… . Здесь же мы рассмотрим веб-сервис обмена с точки зрения структуры конфигурации и программного кода. В моем случае это все работает на IIS.

Итак, первое что мы делаем в нашем примере, это на сервере (dbs2) где крутится сервер 1с (там же у меня и ISS) создаем новую базу (Test_Web_Service) / добавляем в ней роль “Полные права”/ создаем пользователя Admin без пароля. Отлично, с этим справились, далее создаем XDTO-пакет ‘craft1c_DataExchange‘ с пространством имен ‘http://www.craft1c.ru/mng‘ (можете придумать свое!):

XDTO-пакет.
Пространство имен: http://www.craft1c.ru/mng

Далее добавляем тип объекта ‘MessageInfo‘ – с помощью этого объекта мы будем возвращать информацию от веб-сервиса (дальше в коде поймете его суть):

 Объект 'MessageInfo'.
Объект ‘MessageInfo’.

И его свойства ‘Status‘, ‘IsError‘, ‘Description‘ – пускай они будут все одинакового и простого типа ‘string‘:

 Cвойства объекта   'MessageInfo'.
Cвойства объекта ‘MessageInfo’.

Отлично, мы создали XDTO-пакет. Теперь давайте создадим непосредственно сам наш веб-сервис craft1c_DataExchangeService:

  • Пространство имен: http://www.craft1c.ru/mng
  • Пакет XDTO: http://www.craft1c.ru/mng (тот который мы создали выше)
  • Имя файла публикации: craft1c_DataExchangeService.1cws

Веб-сервис: craft1c_DataExchangeService.
Веб-сервис: craft1c_DataExchangeService.

Далее добавляем операцию (метод который мы будем дергать из вне) CreateDictionaryObject и его ‘входной параметр ObjectXML’ типа string (http://www.w3.org/2001/XMLSchema):

Операция 'CreateDictionaryObject'.
Операция ‘CreateDictionaryObject’.
Входной параметр  ObjectXML.
Входной параметр ObjectXML.

Со структурой данных в конфигураторе закончили, теперь осталось прописать код в модуле нашего веб-сервиса и пишем простой код обработки данных и возврата значения:

Идем в модуль веб-сервиса.
Идем в модуль веб-сервиса.

Когда из вне мы будем дергать наш метод, то в качестве параметра получим xml объект, которые программно обработаем так как нам нужно:

Процедура нашего веб-сервиса.
Процедура нашего веб-сервиса.

А в качестве ответа вернем объект из описанного нами XDTO пакета:

Ответ от веб-сервиса.
Ответ от веб-сервиса.

Ребят, смотрите внимательно код в конфигурации – там есть тестовые примеры из моего боевого обмена, в модуле ‘craft1c_МодульСПримерами’.

Отлично, с кодом разобрались – теперь публикуем наш веб-сервис (запускаем конфигуратор под правами администратора!). Идем в меню Администрирование/Публикация на веб-сервере…:

Публикация веб-сервиса.

Перезагружаем ISS. Проверяем что веб-сервис появился в каталоге (файл default.vrd) и там есть файл web.config‘ (есть данный файл у меня в архиве – его структура зависит от версии платформы и расположения файла ‘wsisapi.dll’):

Каталог с веб-сервисом.
Каталог с веб-сервисом.

Далее с локального компьютера можем проверить что наш веб-сервис работает и видна его структура (значит в модуле веб-сервиса ошибок нет). Вбиваем путь в браузер и проверяем ‘http://dbs2/Test_Web_Service/ws/craft1c_DataExchangeService.1cws‘ (авторизация – пользователь и пароль из базы 1с – Admin / пустой пароль):

Если мы все сделали правильно и без ошибок, то появится примерно такое окно:

Все супер! Наш веб-сервис работает, теперь осталось только научиться передавать его данные и проверять жив ли он!

Создадим новую обработку и напишем код проверки доступности нашего веб-сервиса:

Запустим её из базы источника и проверим доступен ли веб-сервис нашей базы приемника:

Подключение успешно проходит!
Подключение успешно проходит!

Отлично, теперь все что нам осталось – это отправить нужный нам объект для обмена по веб-сервису в формате ‘xml’ и получить от него ответ:

Отлично, давайте включим отладку веб-сервиса и посмотрим что происходит на его стороне:

Меню Отладка/Подключение...
Меню Отладка/Подключение…
Отладка на стороне веб-сервиса.
Отладка на стороне веб-сервиса.

На стороне веб-сервиса все работает – xml объект улетел, а что же происходит после вызова веб-сервиса на стороне базы источника:

Отладка на стороне базы источника.
Отладка на стороне базы источника.

А вот на стороне базы источника получаем ошибку (наш xdto-пакет). По ошибке понятно, что в тестовом примере мы не создали сам объект справочника, поэтому программа не может его записать. Исправляем это и снова пробуем сделать обмен:

Обмен прошел успешно!
Обмен прошел успешно!

Вот таким вот нехитрым способом можно сделать обмен данными через веб-сервис. В этой заметке показана основа архитекторы обмена, если все делать красиво то нужно учитывать множество моментов:

  • Для внешних подключений лучше всего сделать отдельный справочник, где хранить строку подключения к веб-сервису, логин и пароль;
  • Регистрацию ошибок производить в регистр сведений;
  • и т.д.

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

Структура архива.
Структура архива.

Скачать файлыcraft1c_ObmenSVebServisom.rar

3+

1 комментарий

  1. Admin (Автор записи)

    + вторая часть работы с веб-сервисом: обмен данные через коллекцию значений!
    https://craft1c.ru/veb-servis-1s-obmen-dannymi-cherez-kollekciju/

    0

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *