我正在使用PHP中的NuSOAP编写Web服务。为了测试它,我写了一个服务器和一个客户端。在服务器端,我注册了这样的函数:
$server->register(
"testFunction",
array("param1" => "xsd:string", "param2" => "xsd:string"),
array("result" => "xsd:string"),
"http://localhost/testApp"
);
客户端看起来像这样:
require_once("./lib/nusoap.php");
$client = new soapclient("http://localhost/testApp/server.php");
$function = $_GET["function"];
unset($_GET["function"]);
$result = $client->call($function, $_GET);
echo "<pre>". print_r($result, true) ."</pre>";
我称之为
http://localhost/testApp/client.php?function=testFunction¶m1=value1¶m2=value2
它工作正常,但如果我切换param1和param2并说
http://localhost/testApp/client.php?function=testFunction¶m2=value2¶m1=value1
然后param1获取值value2
,param2获取值value1
。显然,它只是按参数的顺序而不是名称。
我认为,因为我使用特定的参数名称注册了函数,然后调用了函数,指定了这些参数名称,它们将被相应地分配。
我错过了什么吗?如果参数名称只是被抛出并以您输入的顺序分配,那么指定参数名称有什么意义呢?有没有办法让它能以任何顺序输入参数并让它们正确映射?
答案 0 :(得分:0)
可能会在客户端中找到默认地图:
$default = array(
'param1' => '',
'param2' => 'test',
);
$params = $defaults;
foreach ( $_GET as $param_name => $param_value ) {
if ( isset( $params[ $param_name ] ) ) $params[$param_name] = $param_value;
}
$client->call( $function, $params );
简单的黑客,即使它没有“真正”回答你的问题。
请注意,如果您希望客户端了解正在进行的调用的格式,那么您传递给客户端的URL必须是SOAP WSDL。是你的 ? (我已经很久没有使用nuSoap,但我记得只是在服务器URL中添加“?wsdl”param足以让服务器响应有效的wsdl)