2010-04-13 4 views
6

Я хотел бы вернуть массив строки в моем веб-службМожет ли nusoap вернуть массив строки?

Я судимое:

<?php 
require_once('nusoap/nusoap.php'); 

$server = new soap_server(); 
$server->configureWSDL('NewsService', 'urn:NewsService'); 
$server->register('GetAllNews', 
array(), 
array('return' => 'xsd:string[]'), 
'urn:NewsService', 
'urn:NewsService#GetAllNews', 
'rpc', 
'literal', 
'' 
); 

// Define the method as a PHP function 
function GetAllNews() 
{ 
$stack = array("orange", "banana"); 
array_push($stack, "apple", "raspberry"); 
return $stack; 
} 

, но он не работает. Каков правильный синтаксис для этого?

Заранее спасибо за любую помощь

ответ

9

Сначала необходимо определить новый тип, который описывает массив строк, как так:

$server->wsdl->addComplexType(
    'ArrayOfString', 
    'complexType', 
    'array', 
    'sequence', 
    '', 
    array(
    'itemName' => array(
     'name' => 'itemName', 
     'type' => 'xsd:string', 
     'minOccurs' => '0', 
     'maxOccurs' => 'unbounded' 
    ) 
) 
); 

Затем вы можете использовать tns:ArrayOfString в качестве возвращаемого типа.

+1

Как преобразовать тип данных $ stack (простой массив строки в php) в ArrayOfString, чтобы я мог получить данные $ stack как ArrayOfString в моем клиентском коде (C#)? –

+0

@Ankit: Sorry , не могу с этим поделать. Я написал это давно. –

+0

@Computer Пользователь вы сразу возвращаете значение, и оно будет автоматически запущено – user3980820

1

Этот сайт описывает хороший способ вернуть сложные типы данных и получить его с C#: http://sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html

+1

Код этого сайта работает с WCF. Не используйте SEQUENCE (оставьте параметр состава до AddComplexType пустым), но вместо этого используйте тип ограничения «SOAP-ENC: Array». – xt1

1

При возврате массива массивов, возможно, потребуется другой конфигурации от Оливера. Например, phfunc2php использует эту технику в файле nusoapcode.class.php (https://github.com/sylnsr/pgfunc2php/blob/master/nusoapcode.class.php). Код он генерирует выглядит так:

$server->wsdl->addComplexType(
    'ArrayOfArrays','complexType','array','', 
    'SOAP-ENC:Array', 
    array(), 
    array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]'))); 

, а затем функции нужно просто вернуть «tnsArrayOfArrays:

$server->register(
    'sel_signon_id_by_uuid', 
    array('user_uuid' => 'xsd:string'), 
    array('return'=>'tns:ArrayOfArrays'), 

Упомянутый выше проект может составить рабочий код для вас, если вы хотите, чтобы увидеть это

 Смежные вопросы

  • Нет связанных вопросов^_^