Как клиент php nuSoap переносит ComplexType на сервер .NET SOAP - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь создать клиентский вызов мыла с помощью php nusoap для существующей сборки SOAP-сервера в .NET, которая содержит complexTypes.

Я хочу вызвать QueryTestCategory (см. Ниже)

И он имеет параметры searchTag и Call_Result, которые являются строкой

Но параметр LGI является типом LoginInfo (struct LoginInfo {string User_Name; string Password;})

Итак, как мне настроить параметры для QueryTestCategory?

Я выполняю getTypes Я получаю следующее

struct HelloWorld { }
struct HelloWorldResponse { string HelloWorldResult; }
struct QueryTestSuite { LoginInfo LGI; string searchTag; string Call_Result; }
struct LoginInfo { string User_Name; string Password; }
struct QueryTestSuiteResponse { ArrayOfSuiteInfo QueryTestSuiteResult; string Call_Result; }
struct ArrayOfSuiteInfo { SuiteInfo SuiteInfo; }
struct SuiteInfo { string Test_Suite_ID; string Test_Suite_Name; string Tag; string Owner; string Remark; }
struct QueryTestCategory { LoginInfo LGI; string searchTag; string Call_Result; }
struct QueryTestCategoryResponse { ArrayOfCategoryInfo QueryTestCategoryResult; string Call_Result; }
struct ArrayOfCategoryInfo { CategoryInfo CategoryInfo; }
struct CategoryInfo { string Test_Category_ID; string Test_Category_Name; string Tag; string Owner; string Remark; }
struct QueryTestCase { LoginInfo LGI; string searchTag; string Call_Result; }
struct QueryTestCaseResponse { ArrayOfTestCaseInfo QueryTestCaseResult; string Call_Result; }
struct ArrayOfTestCaseInfo { TestCaseInfo TestCaseInfo; }
struct TestCaseInfo { string Test_Case_ID; string Test_Case_Name; string Test_Case_Version; string Tag; string Entry_Point; string Test_Kit_Name; string Test_Kit_Version; string Extra_Parameter; string Estimate_Time; string Function_Team; string Remark; string Test_Log_Parser_Name; string Test_Log_Parser_Version; string Test_Log_Parser_Entry_Point; string Test_Log_Parser_Extra_Parameter; string Owner; }
struct QueryTestResult { LoginInfo LGI; string TaskID; string Call_Result; }
struct QueryTestResultResponse { string QueryTestResultResult; string Call_Result; }

Я пытаюсь это сделать, но не получается

/*
 *  $Id: wsdlclient1.php,v 1.3 2007/11/06 14:48:48 snichol Exp $
 *
 *  WSDL client sample.
 *
 *  Service: WSDL
 *  Payload: document/literal
 *  Transport: http
 *  Authentication: none
 */
require_once('lib/nusoap.php');
$proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : '';
$proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '';
$proxyusername = isset($_POST['proxyusername']) ? $_POST['proxyusername'] : '';
$proxypassword = isset($_POST['proxypassword']) ? $_POST['proxypassword'] : '';
$client = new nusoap_client('http://www.example.com/Query.asmx?WSDL', 'wsdl',
                        $proxyhost, $proxyport, $proxyusername, $proxypassword);
$err = $client->getError();
if ($err) {
    echo "Constructor error";
}
// Doc/lit parameters get wrapped
$param = array('User_Name' => 'SSD_WS_01', 'Password' => 'SSD_WS_01', 'searchTag' => 'test', 'Call_Result' => '');
$result = $client->call('QueryTestCategory', array('parameter' => $param), '', '', false, true);
// Check for a fault
if ($client->fault) {

    print_r($result);

} else {
    // Check for errors
    $err = $client->getError();
    if ($err) {
        // Display the error
        echo 'Error;
    } else {
        // Display the result
        echo 'Result';
        print_r($result);

    }
}

Я нашел ОТВЕТ!

После прочтения этой веб-страницы и многих других сведений

http://gznofeng.iteye.com/blog/951762

Мой код наконец-то как ниже

Подводя итог ...

создать $ param1 = новый stdClass, установить параметр через $ param1-> varName = 'кое-что'

Вот и все!

<code> 23 // Doc/lit parameters get wrapped
 24 //$param1 = array('User_Name' => 'SSD_WS_01', 'Password' => 'SSD_WS_01');
 25 $param1 = new stdClass();
 26 $param1->User_Name = 'SSD_WS_01';
 27 $param1->Password = 'SSD_WS_01';
 28 
 29 $result = $client->call('QueryTestCategory', array('LGI' => $param1, 'searchTag' => '' ), '', '', false, true);
 30 // Check for a fault
 31 if ($client->fault) {
 32     echo '<h2>Fault</h2><pre>';
 33     print_r($result);
 34     echo '
'; 35} еще { 36 // Проверка на ошибки 37 $ err = $ client-> getError (); 38 if ($ err) { 39 // Показать ошибку 40 echo '

Ошибка

' . $err . '
'; 41} еще { 42 // Показать результат 43 echo '

WoW, Результат

';
 44         print_r($result);
 45         echo '
'; 46} 47}
...