Мегаобучалка Главная | О нас | Обратная связь


Как написать свой WSDL документ и SOAP сервис на его основе



2015-11-11 2905 Обсуждений (0)
Как написать свой WSDL документ и SOAP сервис на его основе 5.00 из 5.00 3 оценки




11 Июл
2012

Некоторое время назад приступил к написание сервиса SOAP для одного из наших проектов. Хоть я и имею большой стаж в разработки веб приложений, но все как то не работал с сервисами. А тут была поставлена задача написать свой сервис для онлайн бронирования и продажи билетов. Начал копаться в сети и собирать информацию по soap и wsdl. Информации не мало но она вся расчитана на людей кто знает wsdl. Я не входил в их число и поэтому мне было мягко говоря трудновато. Есть руководства которые прямо говорят что используйте zend studio для создания wsdl. Меня это не устраивало ибо я хотел понять принцип и структуру документа. Методом тыканий и ошибок а также прочтения документации на английском я разобрался как строится документ. Хотел бы рассказать вам об общих принципами создания wsdl документа которые помогут вам написать свой первый Soap сервис на основе своего wsdl.

Кстати таким же принципом работает система управления веб сайтом concrete5 CMS. На ее основе можно создать сервис любой сложности и достаточно производительных. Начиная от сервиса онлайн продаж билетов до сервиса предоставления api.

Итак давайте приведу пример wsdl файла который мы будем использовать для нашего сервиса:

view sourceprint

?

001.< ?xml version="1.0" encoding="utf-8"?>

002.<definitions name="TicketService"

003.xmlns="http://schemas.xmlsoap.org/wsdl/"

004.xmlns:xsd="http://www.w3.org/2001/XMLSchema"

005.xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

006.xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

007.xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

008.targetNamespace="urn:ADSBibcodeQuery"

009.xmlns:tns="urn:ADSBibcodeQuery">

010.

011.<documentation>

012.Online ticket service

013.</documentation>

014.

015.<types>

016.<schema xmlns="http://www.w3.org/2001/XMLSchema"

017.targetNamespace="urn:ADSBibcodeQuery">

018.<element name="bibcode" type="string" minOccurs="1" maxOccurs="100" />

019.<element name="db_key" type="string" minOccurs="0" />

020.<element name="data_type" type="string" minOccurs="0" />

021.</schema>

022.</types>

023.<!-- Блок содержит информацию о функции и какие параметры она принимает и возвращает -->

024.<message name="sessionId">

025.<part name="body" type="xsd:string" />

026.</message>

027.<message name="hallsList">

028.<part name="body" type="xsd:string" />

029.</message>

030.<message name="hallId">

031.<part name="body" type="xsd:string" />

032.</message>

033.<message name="hallScheme">

034.<part name="body" type="xsd:string" />

035.</message>

036.<message name="token">

037.<part name="body" type="xsd:string" />

038.</message>

039.<message name="sessionsList">

040.<part name="body" type="xsd:string" />

041.</message>

042.<!-- Блок содержит список функций, принимаемые и возвращаемые ими данные и параметры -->

043.<porttype name="TicketServicePort">

044.<operation name="getListOfHalls">

045.<input message="tns:sessionId" />

046.<output message="tns:hallsList" />

047.</operation>

048.<operation name="getScheme">

049.<input message="tns:hallId" />

050.<output message="tns:hallScheme" />

051.</operation>

052.<operation name="getToken">

053.<input message="tns:token" />

054.</operation>

055.<operation name="getSessionsList">

056.<input message="tns:sessionId" />

057.<output message="tns:sessionsList" />

058.</operation>

059.</porttype>

060.

061.<service name="TicketService">

062.<port name="TicketServicePort" binding="tns:TicketServiceBinding">

063.<http:address location="http://nizami.lk/mini.php?a=external_sale" />

064.</port>

065.</service>

066.

067.<binding name="TicketServiceBinding" type="tns:TicketServicePort">

068.<http:binding verb="GET" />

069.<operation name="getListOfHalls">

070.<http:operation location="http://nizami.lk/mini.php?a=external_sale" />

071.<input />

072.<http:urlencoded />

073.

074.<output>

075.<mime:content type="text/html" />

076.</output>

077.</operation>

078.<operation name="getScheme">

079.<http:operation location="http://nizami.lk/mini.php?a=external_sale" />

080.<input />

081.<http:urlencoded />

082.

083.<output>

084.<mime:content type="text/html" />

085.</output>

086.</operation>

087.<operation name="getToken">

088.<http:operation location="http://nizami.lk/mini.php?a=external_sale" />

089.<input />

090.<http:urlencoded />

091.

092.<output>

093.<mime:content type="text/html" />

094.</output>

095.</operation>

096.<operation name="getSessionsList">

097.<http:operation location="http://nizami.lk/mini.php?a=external_sale" />

098.<input />

099.<http:urlencoded />

100.

101.<output>

102.<mime:content type="text/html" />

103.</output>

104.</operation>

105.</binding>

106.</definitions>

Теперь давайте разберем по блокам что у нас находится в этом коде.

Начнем с параметров которые принимают наши методы

view sourceprint

?

1.<message name="sessionId">

2.<part name="body" type="xsd:string" />

3.</message>

name=»sessionId» — этот атрибут содержит название параметра принимаемого функциями

Далее рассмотрим блок объявления методов нашего сервера

view sourceprint

?

1.<input type="text" />

2.<output message="tns:hallsList"></output>

name=»getListOfHalls» — это название нашего метода или функции.

<input message=»tns:sessionId» /> — этот блок отвечает за название принимаемой переменной
<output message=»tns:hallsList» /> — этот блок отвечает за возвращаемый результат метода

далее рассмотрим блок кода отвечающий за определение типов данных возвращаемых нашими методами атак же адресами их расположения

view sourceprint

?

1.<input type="text" />

2.

3.<output>

4.</output>

Блок- отвечает объявление операции где getToken- это название нашего метода
Блок отвечает за привязку метода к адресу.

Теперь кода наш файл wsdl готов необходимо запустить сервер, который будет обрабатывать наши запросы.

view sourceprint

?

01.ini_set('soap.wsdl_cache_enabled', 'Off');

02.

03.try {

04.$server = new SoapServer($_SERVER['DOCUMENT_ROOT'] . '/service.wsdl');

05.$server->setClass("external_sale");

06.$server->setPersistence(SOAP_PERSISTENCE_SESSION);

07.$server->handle();

08.} catch (ExceptionFileNotFound $e) {

09.echo 'Error message: ' . $e->getMessage();

10.}

Строка $server->setClass(«external_sale»); означает что мы назначаем класс в котором будут методы описанные нами в wsld схеме.

Для запуска клиента необходимо написать:

view sourceprint

?

1.$client = new

2.SoapClient(

3."http://nizami.lk/mini.php?a=external_sale&;amp;amp;action=wsdl"

4.);

Теперь мы можем использовать методы объявленные в нашем wsdl документе

view sourceprint

?

1.echo $client->getSessionsList(13);

Конечно вручную писать Wsdl документ тяжеловато. В zend studio его можно автоматически сгенерировать на основе комментариев.



2015-11-11 2905 Обсуждений (0)
Как написать свой WSDL документ и SOAP сервис на его основе 5.00 из 5.00 3 оценки









Обсуждение в статье: Как написать свой WSDL документ и SOAP сервис на его основе

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (2905)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)