рубрики: Web-Сервисы | Дата: 3 июля, 2017
Сегодня хочу в продолжение темы про обмен данными через веб-сервисы 1С, рассмотреть как его можно реализовать в типовых конфигурациях, с использованием функций из общих модулей. Рассмотрю на примере ЗУП редакции 3.1. Подозреваю, что в других типовых конфигурациях реализовано, если не в точности так же, то наподобие.
Для демонстрации воспользуюсь веб-сервисом 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 описание. Достаточно один раз его импортировать. А в остальном статическая ссылка менее удобна, т.к. требует обновления конфигурации при изменении веб-сервиса. Но с учетом механизма кэширования это преимущество статической ссылки перед динамической полностью теряется.
Добавить комментарий