Механизм взаимодействия клиента и сервера
1. Клиентское приложение создает экземпляр объекта SOAPClient
2. SOAPClient читает файлы описания методов веб-сервиса (WSDL и Web Services Meta Language - WSML). Эти файлы могут храниться и на клиенте.
3. Клиентское приложение, используя возможности позднего связывания методов объекта SOAPClient, вызывает метод сервиса. SOAPClient формирует пакет запроса (SOAP Envelope) и отправляет на сервер. Возможно использование любого транспортного протокола, но, как правило, используется HTTP.
4. Пакет принимает серверное приложение Listener (может представлять собой ISAPI приложение или ASP страницу), создает объект SOAPServer и передает ему пакет запроса
5. SOAPServer читает описание веб-сервиса, загружает описание и пакет запроса в XML DOM деревья
6. SOAPServer вызывает метод объекта/приложения, реализующего сервис
7. Результаты выполнения метода или описание ошибки конвертируются объектом SOAPServer в пакет ответа и отправляются клиенту
8. Объект SOAPClient проводит разбор принятого пакета и возвращает клиентскому приложению результаты работы сервиса или описание возникшей ошибки.
WSDL файл это документ в формате XML, описывающий методы, предоставляемые веб-сервисом. Также параметры методов, их типы, названия и местонахождение Listener`а сервиса. SOAP Toolkit визард автоматически генерирует этот документ.
Фрагмент WSDL файла:
..<message name=" SOAPClass.SubtractNumbers"> <part name="NumberOne" type="xsd:double" /> <part name="NumberTwo" type="xsd:double" /> </message> <message name=" SOAPClass.SubtractNumbersResponse"> <part name="Result" type="xsd:double" /> </message> <message name=" SOAPClass.AddNumbers"> <part name="NumberOne" type="xsd:double" /> <part name="NumberTwo" type="xsd:double" /> </message> <message name=" SOAPClass.AddNumbersResponse"> <part name="Result" type="xsd:double" /> </message>...SOAP Envelope (Пакет) - XML документ, который содержит в себе запрос/ответ на выполнение метода. Удобнее всего рассматривать его как почтовый конверт, в который вложена информация.
Структура SOAP пакета
Тэг Envelope должен быть корневым элементом пакета. Элемент Header не обязателен, а Body должен присутствовать и быть прямым потомком элемента Envelope. В случае ошибки выполнения метода сервер формирует пакет, содержащий в тэге Body элемент Fault, который содержит подробное описание ошибки.
Если вы пользуетесь высокоуровневыми интерфейсами SOAPClient, SOAPServer, то вам не придется вдаваться в тонкости формата пакета, но, при желании, можно воспользоваться низкоуровневыми интерфейсами или же вообще создать пакет «руками».
Объектная модель SOAP Toolkit дает возможность работать с объектами низкоуровневого API:
SoapConnector - Обеспечивает работу с транспортным протоколом для обмена SOAP пакетами
SoapConnectorFactory - Обеспечивает метод создания коннектора для транспортного протокола, указанного в WSDL файле (тэг <soap:binding>)
SoapReader - Читает SOAP сообщения и строит XML DOM деревья
SoapSerializer - Содержит методы создания SOAP сообщения
IsoapTypeMapper, SoapTypeMapperFactory - Интерфейсы, позволяющие работать со сложными типами данных
Используя объекты высокоуровневого API можно передавать данные только простых типов (int, srting, float …), но спецификация SOAP 1.1 допускает работу с более сложными типами данных, например с массивами, структурами, списками и их комбинациями. Для работы с такими типами приходится использовать интерфейсы IsoapTypeMapper и SoapTypeMapperFactory.
Лекция
Дата добавления: 2015-09-14; просмотров: 950;