Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой soap приемник, Если есть wsdl как создать soap премник 
:(
    Опции темы
Su_
Дата 7.5.2013, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Всем доброго дня!

До сего работал с REST и проблем не знал, но понадобилось разбирать с протоколом SOAP. Причем soap используют только как транспорт для данных. Есть wsdl файл описывающий типы, сообщение и т.д.

Где можно найти примере простого Soap приемника строящегося на базе wsdl?

Есть пример простого сервера:

Код

$server = new SoapServer("interaction.wsdl");  
$server->setClass("ValueService");  
$server->handle(); 


Что он должен делать?


--------------------
user posted image

PM MAIL WWW   Вверх
Sanchezzz
Дата 7.5.2013, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Код

class ValueService {
  public function test(){     echo __CLASS__, "::", __METHOD__; }
  public function __construct() { }

}

$server = new SoapServer("interaction.wsdl");  //Создаем сервер 
$server->setClass("ValueService");   // экспортирует из указанного класса методы 
$server->handle();  // слушает какой запрос и выполняет по условию нужную функцию согласно запросу SOAPCLIENT 


$server->handle() Сеттер параметр это переопределение обработчик если не задан то транспортный уровень работает по умолчанию 
SoapServer::__doRequest, его также можно переопределить через наследование класса



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Su_
Дата 7.5.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Спасибо, т.е. как я понял по сути в классе ValueService нужно описать методы которые могут придти от soap клиента?

К примеру в wsdl есть тег binding и в нем:

Код

<wsdl:operation name="publishIncident">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="publishIncident">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="publishIncidentResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>

 
Получается если мы в классе ValueService создам метод  publishIncident
 
Код

class ValueService {
  public function test(){     echo __CLASS__, "::", __METHOD__; }
  public function publishIncident($data){

doSomthing($data);


}
  public function __construct() { }
}
$server = new SoapServer("interaction.wsdl");  //Создаем сервер 
$server->setClass("ValueService");   // экспортирует из указанного класса методы 
$server->handle();  // слушает какой запрос и выполняет по условию нужную функцию согласно запросу SOAPCLIENT


То при обращение к такому серверу soap клиента , будет исполнит метод класса ValueService?


И еще вопрос если позволите, как получить тело soap запроса, т.е. по сути xml. 
Т.е. handle ждет на 80 или 8080 порту клиента, к нему приходит пакет, в теле которого xml (soap) как это xml захватить и например записать в файл?



--------------------
user posted image

PM MAIL WWW   Вверх
Fortop
Дата 7.5.2013, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Su_ @  7.5.2013,  14:40 Найти цитируемый пост)
То при обращение к такому серверу soap клиента , будет исполнит метод класса ValueService?

В общем и целом - да. Есть нюансы лишь в корректности описаний сервиса


Цитата(Su_ @  7.5.2013,  14:40 Найти цитируемый пост)
И еще вопрос если позволите, как получить тело soap запроса, т.е. по сути xml. 

Зачем?

http://ua2.php.net/manual/ru/class.soapclient.php



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Su_
Дата 7.5.2013, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 1.8.2007

Репутация: нет
Всего: нет



Цитата

Зачем?

Я так понимаю soap можно использовать как RPC так и просто по передаче данных.

В частности клиент может сам посылать данные на сервер?

Т.е. клиент вызывает url и передает в пакете данные в формате soap.

Как эти данные на сервере сохранить в файл например?


--------------------
user posted image

PM MAIL WWW   Вверх
Fortop
Дата 8.5.2013, 17:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Su_ @  7.5.2013,  19:20 Найти цитируемый пост)
Я так понимаю soap можно использовать как RPC так и просто по передаче данных.

Можно, но неэффективно.
Слишком большой оверхед для всего лишь передачи данных.

Цитата(Su_ @  7.5.2013,  19:20 Найти цитируемый пост)
Как эти данные на сервере сохранить в файл например?

Но тебе же не нужен весь soap-пакет

Тебе нужны лишь данные, которые пришли в нем

Пишешь метод/функцию, которая будет сохранять полученные данные в файл.
И клиентом шлешь данные именно этому методу.


Если ты не планируешь работать кроссплатформенно, то посмотри реализацию Zend_Soap_Server/Zend_Soap_Client
Они избавят тебя от необходимости написания правильного wsdl

Если в планах взаимодействие с .net/java тогда можешь погружаться в спецификации

Добавлено через 53 секунды
P.S. по указанной ссылке на php.net есть информация как получить доступ к raw данным soap-пакета


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.