Профессия — 1С

Рукопашный бой Карташ

Категории

Использование веб-сервисов в типовых конфигурациях

рубрики: Web-Сервисы | Дата: 3 Июль, 2017

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

Создание WSПрокси с использованием программного интерфейса

Для демонстрации воспользуюсь веб-сервисом my_ws, созданным ранее. Процесс его создания описан в статье про использование веб-сервисов для обмена данными. В общем модуле ЗУП ОбщегоНазначения в области программных интерфейсов существует Функция СоздатьWSПрокси(ПереданныеПараметры), которая возвращает объект WSПрокси. Исходные данные необходимые для создания WSПрокси передаются в структуре ПереданныеПараметры.




Минимальный набор данных, которые необходимо передать функции это: имя веб-сервиса, строку с адресом WSDL, URI пространства имен, имя пользователя и пароль для подключения к веб-серверу. Привожу код, который выполняет те же действия, что и в предыдущей статье:




&НаСервере
Функция ПодключитьсяЧерезОбщийМодульНаСервере()

	ПараметрыWSПрокси = Новый Структура;

	ПараметрыWSПрокси.Вставить("ИмяСервиса", "my_ws");
	ПараметрыWSПрокси.Вставить("АдресWSDL", "http://localhost/professia1c/ws/my_ws.1cws?wsdl");
	ПараметрыWSПрокси.Вставить("URIПространстваИмен", "http://www.professia1c.ru/");
	ПараметрыWSПрокси.Вставить("ИмяПользователя", "Сидоров");
	ПараметрыWSПрокси.Вставить("Пароль", "");

	ВСПрокси = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыWSПрокси);

	ТекстВС = ВСПрокси.HelloUsr("Вася");

	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = ТекстВС;
	Сообщение.Сообщить();

КонецФункции

Очевидно, что WS-ссылка в этом случае создается динамически.

Кэширование

Кроме того, что функция СоздатьWSПрокси() непосредственно создает объект WSПрокси, она еще и кэширует WSDL описание веб-сервиса в регистре сведений КэшПрограммныхИнтерфейсов. То есть после первого запуска рассмотренной выше функции мы увидим в регистре сведений вот такую запись:

А если провалимся в нее, то увидим вот такую картину:

И при повторном запуске функции общего модуля СоздатьWSПрокси() WSDL описание не будет создаваться повторно, а будет взято из соответствующей записи регистра. Этот момент следует учитывать при изменении веб-сервиса. Казалось бы веб-сервис заново опубликован, веб-сервер перезапустили, а обращение к веб-сервису выдает ошибку. Это происходит потому что берется старое WSDL описание из кэша. Чтобы исправить ситуацию надо удалить соответствующую запись из регистра сведений КэшПрограммныхИнтерфейсов, и тогда WSDL описание будет сгенерировано заново.

Заключение

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




Хочется также заметить, что в типовой ЗУП вы не увидите ни одной статической WS-ссылки, т.е. созданной в конфигураторе. Это и не удивительно. Ведь основное преимущество статической ws-ссылки перед динамической это то, что не приходится каждый раз заново создавать WSDL описание. Достаточно один раз его импортировать. А в остальном статическая ссылка менее удобна, т.к. требует обновления конфигурации при изменении веб-сервиса. Но с учетом механизма кэширования это преимущество статической ссылки перед динамической полностью теряется.

Добавить комментарий

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

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С