我有一个使用 NuSOAP 的工作 webService。现在,我必须在返回请求的数据之前进行验证。如果一切正常,我会正常返回,否则我想返回一条字符串消息,解释为什么我没有提供所要求的信息。问题是我无法将两种不同类型的返回添加到 NuSOAP 的 RegisterFunction。如果我添加一个 ComplexType 作为返回,我不能返回一个字符串。
问问题
2367 次
2 回答
2
该函数不能有两个返回值。您应该将错误消息字符串添加到您的复杂类型中。如果您不想触及复杂类型,那么您应该创建另一个包含您的数据类型和字符串的复杂类型。
示例 - 您现在拥有的复杂类型:
$server->wsdl->addComplexType('myData','complexType','struct','all','',
array( 'important' => array('name' => 'important','type' => 'xsd:string'),
'stuff' => array('name' => 'stuff','type' => 'xsd:string')
)
);
额外的复杂类型:
$server->wsdl->addComplexType('package','complexType','struct','all','',
array( 'data' => array('name' => 'data','type' => 'tns:myData'),
'errormsg' => array('name' => 'errormsg','type' => 'xsd:string')
)
);
函数注册:
$server->register(
'getData',
array('validation'=>'xsd:string'),
array('return'=>'tns:package'),
$namespace,
false,
'rpc',
'encoded',
'description'
);
功能:
function GetData($validation)
{
if($validation == "thegoodguy") {
$result['data'] = array(
"important" => "a top secret information",
"stuff" => "another one"
);
$result['errormsg'] = null;
} else {
$result['data'] = null;
$result['errormsg'] = "permission denied!";
}
return $result;
}
这样,客户端可以尝试分析接收到的数据,如果它为空,那么他会显示错误消息。
于 2013-01-07T13:49:06.627 回答
0
您首先需要定义一个描述字符串数组的新类型,如下所示:
$server->wsdl->addComplexType(
'ArrayOfString',
'complexType',
'array',
'sequence',
'',
array(
'itemName' => array(
'name' => 'itemName',
'type' => 'xsd:string',
'minOccurs' => '0',
'maxOccurs' => 'unbounded'
)
)
);
然后你可以使用 tns:ArrayOfString 作为返回类型。
于 2012-12-22T05:40:16.940 回答