SOAP服务器没有获取所有参数

net*_*rox 7 php soap

我正在使用PHP,我使用与PHP捆绑在一起的SOAP类.我整天都在努力弄清楚为什么这不起作用.

我在客户端写了这个:

 $client = new SoapClient("Audit.wsdl");                              
 $params=array('SerialNumber'=>'PB4LAX6JLJT7M','PercentProgress'=>'50','ResultID'=>'5');
 $result=$client->__soapCall('HardDriveStatusUpdate',array($params));
Run Code Online (Sandbox Code Playgroud)

然后我在服务器端写了这个:

function HardDriveStatusUpdate($sn, $p, $rs)
{
    $serialNumber=$sn->SerialNumber;
    $percentProgress=$p->PercentProgress;
    $resultID=$rs->ResultID; 
    // process with variables 
    return array('HardDriveStatusUpdateResult' => '$result');
}

$server=new SoapServer('Audit.wsdl');
$server->addFunction('HardDriveStatusUpdate');
$server->handle();
Run Code Online (Sandbox Code Playgroud)

我注意到什么都没发生.为了调试,我有一个函数用"$ serialNumber,$ percentProgress,$ resultID"写入文件.事实证明它只获得了第一个参数,但第二个和第三个参数是空的.(它显示"PB4LAX6JLJT7M ,,")为什么?

WSDL说:

 <s:element name="HardDriveStatusUpdate">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="SerialNumber" type="s:string" />
        <s:element minOccurs="1" maxOccurs="1" name="PercentProgress" type="s:int" />
        <s:element minOccurs="1" maxOccurs="1" name="ResultID" type="s:int" />
      </s:sequence>
    </s:complexType>
  </s:element>
Run Code Online (Sandbox Code Playgroud)

我如何构造参数有什么问题吗?

使用__getLastRequest()进行测试:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://127.0.0.1/soap/">
     <SOAP-ENV:Body>
         <ns1:HardDriveStatusUpdate>
             <ns1:SerialNumber>PB4LAX6JLJT7M</ns1:SerialNumber>
             <ns1:PercentProgress>50</ns1:PercentProgress>
             <ns1:ResultID>5</ns1:ResultID>
         </ns1:HardDriveStatusUpdate>
     </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

真正的问题绝对是服务器端.即使所有参数都已在SOAP请求中发送,该函数也不会获取参数.这是为什么?我尝试了另一种方法,它仍然无法获得第二个参数.它只适用于FIRST参数.

Ana*_*nas 5

我用你提供的wsdl尝试了你的代码,参数是在一个对象中发送的,所以这里是你需要做的更改:

function HardDriveStatusUpdate($myObject)
{
    $serialNumber = $myObject->SerialNumber;
    $percentProgress = $myObject->PercentProgress;
    $resultID = $myObject->ResultID; 
    // process with variables 
    return array('HardDriveStatusUpdateResult' => true);
}
Run Code Online (Sandbox Code Playgroud)

我在SoapUi中测试了它(带print_r($myObject); die();),这是结果

:在此输入图像描述