2010-04-13 94 views
6

我想在我的web服务nusoap可以返回字符串数组吗?

我tryed返回字符串数组:

<?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,以便我可以在我的客户端代码(C#)中将$ stack的数据作为ArrayOfString? – 2013-03-24 22:49:56

+0

@Ankit:对不起,对此我无法帮到你,我很久以前写了这篇文章, – 2013-03-24 22:53:57

+0

@Computer用户你直接返回值,它会自动铸造 – user3980820 2015-07-04 02:27:22

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'), 

上述可以编译为你工作的代码,你应该希望看到这个项目