NuSOAP - параметры функции отображаются неправильно - PullRequest
1 голос
/ 29 августа 2011

Я пишу веб-сервис, использующий NuSOAP на PHP.Чтобы проверить это, я написал и сервер, и клиент.На стороне сервера я регистрирую функцию следующим образом:

$server->register(
    "testFunction",
    array("param1" => "xsd:string", "param2" => "xsd:string"),
    array("result" => "xsd:string"),
    "http://localhost/testApp"
);

А на клиенте выглядит так:

<code>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) ."
";

Когда я ее вызываюкак и

http://localhost/testApp/client.php?function=testFunction&param1=value1&param2=value2

, он работает нормально, но если я переключаю param1 и param2 и говорю

http://localhost/testApp/client.php?function=testFunction&param2=value2&param1=value1

, тогда param1 получает значение value2, а param2 получает значение value1.очевидно, это просто идет по порядку параметров, а не по именам.

Я подумал, что, поскольку я зарегистрировал функцию с конкретными именами параметров, а затем вызвал функцию, указав эти имена параметров, они будут назначенысоответственно.

Я что-то упустил? Какой смысл указывать имена параметров, если они будут просто выброшены и назначены в том порядке, в котором вы их ввели? Есть ли способ сделать так, чтобы я мог ввестипараметры в любом порядке и правильно ли они отображаются?

1 Ответ

0 голосов
/ 20 сентября 2011

может пойти на карту по умолчанию в клиенте:

    $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, но я вспоминаю, что простого добавления параметра «? Wsdl» в URL-адрес сервера было достаточно, чтобы сервер ответил верным wsdl)

...