为什么我对 Web 服务的 nuSOAP 客户端请求返回一个空数组?

问题描述

我正在使用 xampp,如果有帮助的话。

代码应该从 client.PHP 向 server.PHP 发送查询,以获取数据库中的模块名称,并返回相应的模块代码和讲师名称。单独发送查询数据库查询工作正常,但是当响应到达 client.PHP 时,返回的数组为空。请问有人可以帮忙吗?

server.PHP

<?PHP
// Pull in the NuSOAP code
require_once('nusoap.PHP');
require_once('db_connect.PHP');


$con = new MysqLi("localhost","root","","experience");

// Check connection
if ($con -> connect_errno) {
  echo "Failed to connect to MysqL: " . $con -> connect_error;
  exit();
}

// Create the server instance
$server = new soap_server();

// Initialize WSDL support
$NAMESPACE = 'http://www.uom.ac.mu/experience';
$server->debug_flag=false;
$server->configureWSDL('Module',$NAMESPACE);
$server->wsdl->schemaTargetNamespace = $NAMESPACE;

// ==== METHOD IMPLEMENTATION ===============================================

// ---- getExperience(module) ------------------------------------------------------

function getExperience($value) {
    $searchCriteria = $value['input'];

    $sql = "SELECT CONCAT( L.Name,' ',L.Surname ) AS Lecturer,CONCAT( M.ModuleCode,'-',M.ModuleName )
            AS Module,L.Experience AS Experience FROM lecturers L,modules M WHERE L.ModuleCode = M.ModuleCode
            AND M.ModuleName LIKE '%".$searchCriteria."%' ORDER BY L.Experience DESC;";

    //$result = MysqL_query($sql);
    $result = MysqLi_query($con,$sql);

        $experience = array();
        $experienceArray = array();
        if (MysqLi_num_rows($result) > 0) {
         //if(MysqL_num_rows($result) > 0){
            //while ($row = MysqL_fetch_assoc($result)) {
                while($row = MysqLi_fetch_assoc($result)) {
                $experience = array('lecturer'=>$row['Lecturer'],'module' => $row['Module'],'experience' => $row['Experience']);
                $experienceArray[] += $experience;
            }
            //MysqL_free_result($result);

        }
        else{
            $module = array('lecturer'=>'NO DATA','module' => 'NO DATA','experience' => 'NO DATA');
        }

    return $experienceArray;

    //MysqL_close($con);
    MysqLi_close($con);
}


// ==== WSDL TYPES DECLaraTION ==============================================

// ---- LecturerExperience ----------------------------------------------------------------

$server->wsdl->addComplexType(
    'LecturerExperience','complexType','struct','sequence','',array(
        'lecturer' => array('name'=>'lecturer','type'=>'xsd:string'),'module' => array('name'=>'module','experience' => array('name'=>'experience','type'=>'xsd:int')
    )
);

// ---- LecturerExperienceArray[] --------------------------------------------------------------

$server->wsdl->addComplexType(
    'LecturerExperienceArray','array','SOAP-ENC:Array',array(),array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:LecturerExperience[]')
    ),'tns:LecturerExperience'
);


// ==== WSDL FUNCTIONS REGISTRATION ===========================================

$server->register('getExperience',// method name
    array('input' => 'xsd:string'),// input parameters
    array('output' => 'tns:LecturerExperienceArray'),// output parameters
    $NAMESPACE);                                        //namespace


// ==== PROCESS REQUEST =====================================================

@$server->service(file_get_contents("PHP://input"));
exit();

?>

client.PHP

<?PHP
error_reporting(E_ALL); 
require_once('nusoap.PHP');

//Get input parameter
if(isset($_GET["txt_module"]))
        $module = $_GET["txt_module"];

//Create a soap client
$url = "https://localhost/xampp/Sem2/Week3/server.PHP?wsdl";
$client = new nusoap_client($url);

$err = $client->getError();
if ($err) {
    echo '<p><b>Error: ' . $err . '</b></p>';
}

$args = array('input' => $module);

print_r($args);
$response = $client->call('getExperience',array($args));

//display SOAP Request/Response
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request,ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response,ENT_QUOTES) . '</pre>';

//Reading returned Object and creating XML
$XMLDocument = new SimpleXMLElement('<?xml version="1.0" ?><Experiences></Experiences>');

foreach($response as $record){
    $experience = $XMLDocument->addChild('LecturerExperience');
    $experience->addChild('Lecturer',$record[lecturer]);
    $experience->addChild('Module',$record[module]);
    $experience->addChild('Experience',$record[experience]);
}

// Apply XSLT to display the SOAP Response
$XSLDocument = new DOMDocument();
$XSLDocument->load("module.xsl");
$XSLProcessor = new XSLTProcessor();//PHP5
$XSLProcessor->importStylesheet($XSLDocument);
echo $XSLProcessor->transformToXML($XMLDocument);

?>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)