WebServices. Как вернуть несколько значений?

TsarAlex

Новичок
[PHP4][nuSoap]: WebServices. Как вернуть несколько значений?

Здравствуйте!

Подскажите пожалуйста как вернуть из функции (которая является частью ВебСервиса) несколько переменных (коллекцию)?
используются PHP4, и библиотека nuSoap

Заранее большое спасибо!
 

slach

Новичок
пробуй возвращать массив и посмотри что такое SOAP Complex Types (вроде правильно написал, не уверен, так как предпочитаю REST и XML-RPC сервисы)
 

Alexandre

PHPПенсионер
надо делать через SOAP Complex Types, для этого их и придумали.

возращается через ассоциативный массив, впрочем - повторяюся...
 

TsarAlex

Новичок
В статье http://phpclub.ru/detail/article/nusoap
Webservice-метод возвращает переменную php-типа array. Но в зарубежных статья возвращается значение SOAPVal, где указывается имя переменной, тип и значение.
В чём разница?

И еще никак не могу понять - почему выходные параметры задются как Array если на выходе всегда только один параметр (даже если его тип ComplexType - он всеравно один)?

-~{}~ 27.03.07 18:28:

Автор оригинала: slach
пробуй возвращать массив и посмотри что такое SOAP Complex Types (вроде правильно написал, не уверен, так как предпочитаю REST и XML-RPC сервисы)
Подскажите пожалуйста, где можно поглядеть примеры исходников PHP4 + XML-RPC?
 

antony

Новичок
Webservice-метод возвращает переменную php-типа array. Но в зарубежных статья возвращается значение SOAPVal, где указывается имя переменной, тип и значение.
В чём разница?
Если в Webservice определен WSDL то имя переменной и тип NuSOAP найдет там а array будет значением - разницы никакой.
Если нет WSDL - фиг знает, не пробовал

И еще никак не могу понять - почему выходные параметры задются как Array если на выходе всегда только один параметр (даже если его тип ComplexType - он всеравно один)?
SOAP-овский ComplexType пердставляеться в PHP ассоциативным массивом

Посмотри http://www.scottnichol.com/soap.htm
 

TsarAlex

Новичок
Перечитал все ссылки по NuSOAP, но никак не могу понять - как передать RecordSet/DataTable. То есть надо вернуть двумерный массив, у которого названия столбцов заданы как строки. Подскажите пожалуйста куда копать.
 

antony

Новичок
PHP:
$server = new soap_server();
$server->configureWSDL("hellowwsdl", "urn:hellowwsdl");

$server->wsdl->addComplexType("some_struct", "complexType", "struct", "all",	"",
	array("row1_name" => array("name" => "row1_name", "type" => "xsd:string"),
		"row2_name" => array("name" => "row2_name", "type" => "xsd:string"))
);

$server->wsdl->addComplexType("some_struct_array", "complexType",	"array", "", "SOAP-ENC:Array", array(),
	array(array("ref" => "SOAP-ENC:arrayType", "wsdl:arrayType" => "tns:some_structl[]")), "tns:some_struct"
);

$server->register("getInfo",
    array("username" => "xsd:string", "pass" => "xsd:string"),
    array("return" => "tns:some_struct_array")
);

function getInfo($username, $password)
 {
   return array(
          array('row1_name' => 'text1', 'row2_name' => 'text2'),
          array('row1_name' => 'text3', 'row2_name' => 'text4')
   );
 }
это я переделал из более сложного варианта в своем коде
не проверял, но должно работать
 

TsarAlex

Новичок
Спасибо!
А возможно ли тут наследование типов?
Всмысле... при описании some_struct_array дважды была ссылка на tns:some_struct, наверное есть возможность в одном случае указать базовый тип, а в другом - наследованный и поиметь при этом некоторую гибкость?
 
Сверху