Поиск по блогу

вторник, 7 апреля 2015 г.

Вызов Web-сервиса с помощью динамической ссылки

Вызов веб-сервиса выполнением POST-запроса

Механизм Web-сервисов позволяет использовать систему, написанную на платформе 1С, как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать ее с другими информационными системами с использованием сервис-ориентированной архитектуры (SOA).

Платформа 1С позволяет разработчику вызывать Web-сервисы, предоставляемые другими поставщиками, двумя способами:
  • с помощью статических ссылок, создаваемых в дереве объектов конфигурации;
  • с помощью динамических ссылок, создаваемых средствами встроенного языка.
При использовании статической ссылки платформа 1С получает описание Web-сервиса поставщика только один раз, при создании ссылки. За счет этого достигается большая скорость работы.
1. Объект конфигурации WS-ссылки для использования механизма статических ссылок
При использовании динамической ссылки, описание Web-сервиса получается каждый раз при вызове Web-сервиса. Скорость работы при этом уменьшается, но зато такой подход обеспечивает актуальность описания Web-сервиса поставщика, то есть используется последняя версия WSDL-документа. В случае же использования статических ссылок для получения актуального описания Web-сервиса требуется выполнить повторный импорт WSDL-документа средствами конфигуратора и затем сохранить измененную конфигурацию.

*WSDL-документ - язык описания веб-сервисов и доступа к ним, основанный на языке XML.

Рассмотрим пример вызова Web-сервиса с помощью динамической ссылки на примере сервиса проверки правописания Яндекс.Спеллер. Для доступа к Яндекс.Спеллеру по HTTP предлагаются XML-, SOAP-, JSON- и JSONP-интерфейсы. Все интерфейсы обеспечивают одинаковую функциональность и используют одни и те же входные параметры. WSDL-документ для SOAP доступен по адресу: http://speller.yandex.net/services/spellservice?WSDL.

Функция вызова Web-сервиса:
// Функция осуществляет проверку правописания текста.
//
// Параметры
//  ПроверяемыйТекст  - Строка - текст для проверки правописания.
//
// Возвращаемое значение:
//   Строка   - слова, в которых допущены ошибки.
//
&НаСервере
Функция ПроверитьОрфографию(ПроверяемыйТекст)

МестоположениеWSDL = "http://speller.yandex.net/services/spellservice?WSDL";
WSОпределение = Новый WSОпределения(МестоположениеWSDL);

ПространствоИмен = "http://speller.yandex.net/services/spellservice";
SpellService = Новый WSПрокси(WSОпределение, ПространствоИмен, "SpellService", "SpellServiceSoap");

Ответ = SpellService.checkText(ПроверяемыйТекст);

Ошибки = "";
Для Каждого Ошибка Из Ответ.error Цикл
Ошибки = Ошибки + "Ошибка в слове: " + Ошибка.word + Символы.ПС;
КонецЦикла;

Возврат Ошибки;

КонецФункции // ПроверитьОрфографию()


В данной функции создается объект WSОпределения, который получает определение Web-сервиса из WSDL-документа, адрес документа приведен выше.

На основе определения Web-сервиса создается объект WSПрокси и связывается с точкой подключения Web-сервиса SpellServiceSoap.

Для инициализации объекта WSПрокси вся необходимая информация содержится в элементе <wsdl:service> WSDL-документа. В атрибуте name этого элемента содержится имя сервиса, а атрибут name дочерних элементов <wsdl:port> содержит имя точки подключения.
2. Точки подключения Web-сервиса и его имя
Адрес пространства имени содержится в теге targetNamespace корневого элемента WSDL-документа <wsdl:definitions>.
3. Адрес пространства имени Web-сервиса
После инициализации объекта WSПрокси, выполняется операция Web-сервиса checkText(), в которую передаётся текст.
4. Операции Web-сервиса и их типы входящих и исходящих сообщений
Операция веб-сервиса возвращает список ошибок в виде списка XDTO. Сам элемент списка представляется объектом XDTO.

К сожалению, платформа 1С во всем объеме не поддерживает работу с Web-сервисами средствами встроенного языка, например, задать значения атрибутов lang, options, format для входящего сообщения операции checkText() становится невозможным, так как нам дозволено только передавать параметры операции:
5. Описание входящего сообщения операции checkText()
Термин XDTO (XML Data Transfer Objects), означает не какой-то всемирно принятый стандарт, поддерживаемый платформой 1С, а наоборот, стандарт рожденный в недрах фирмы 1С, хотя очень похож на XML Schema, на недоделанный XML Schema.

А так, работать можно! :)

Обработку вызова веб-сервиса Яндекс.Спеллер можно скачать по этой ссылке.

Комментариев нет:

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