6

我想在我的网络服务中返回一个字符串数组

我试过了:

<?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;
}

但它不起作用。什么是正确的语法?

提前感谢您的帮助

4

3 回答 3

9

您首先需要定义一个描述字符串数组的新类型,如下所示:

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

然后您可以tns:ArrayOfString用作返回类型。

于 2010-04-14T15:04:36.217 回答
1

返回数组数组时,您可能需要与 Oliver 不同的配置。例如 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'),

如果你想看的话,上面提到的项目可以为你编译工作代码。

于 2013-04-12T20:29:27.083 回答
1

该站点描述了一种返回复杂数据类型并使用 C# 接收它的好方法:http: //sanity-free.org/125/php_webservices_and_csharp_dotnet_soap_clients.html

于 2011-09-08T09:31:29.947 回答