首先,我必须说我对使用NuSOAP的基于WSDL的Web服务完全不熟悉。我试图从我的肥皂服务器返回一个朋友列表数组。请在下面找到我的代码清单:
服务器:
//File includes omitted
function getFriendList($test = ''){
$results = array();
$results[] = array('name' => 'XXXXA1', 'surname' => 'XXXXA2');
$results[] = array('name' => 'XXXXXB1', 'surname' => 'XXXXB2');
$results[] = array('name' => 'XXXXXC1', 'surname' => 'XXXXC2');
return $results;
}
//Create server instance
$server = new soap_server();
//Configure our WSDL
$server->configureWSDL('server', 'urn:server');
//Add our Complex Type data type since we want to return an array
$server->wsdl->addComplexType(
'Friend',
'complexType',
'struct',
'all',
'',
array(
'name' => array('name' => 'name', 'type' => 'xsd:string'),
'surname' => array('name' => 'surname', 'type' => 'xsd:string')
)
);
//Register our array as a response
$server->wsdl->addComplexType(
'FriendArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Friend[]')
),
'tns:Friend'
);
//Register the actual function that retuns the array but in the
//return n field specify the complex type of array we added onto the wsdl
$server->register('getFriendList',
array('test' => 'xsd:string'),
array('return' => 'tns:FriendArray'),
'urn:server',
'urn:server#getFriendList',
'document',
'encoded',
'Fetch a list of friends as an array. If you\'re not here sorry.'
);
//Serve the service
$server->service($HTTP_RAW_POST_DATA = (!isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : '');
有了这个,我希望我做的一切都正确。我按照标准程序使其工作但是静脉。
在客户端,我使用了wsdl中的soap地址url并附加了“?wsdl”,因此它动态地为我提供了wsdl文件。
示例:
//Client call
$client = new nusoap_client("http://soapserver.dev/webroot/part_three/server.php?wsdl", true);
我还在我的客户端对象上添加了一些口哨和铃铛,如下所示:
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
这似乎没有任何帮助。我之前遇到过一个问题,因为我的函数不接受任何参数,我的服务因为没有传递任何参数来说明我的$ client->调用($ name,$ in,$ out)。我最终提供了一个空数组,我收到了这个错误。
这可能与寄存器功能的rpc / document参数类型有关吗?
即使使用我从服务器网址保存的wsdl文件,我也遇到了同样的错误。
有人可以帮帮我吗?请!