我正在使用 PHP,并且使用与 PHP 捆绑在一起的 SOAP 类。我花了一整天的时间试图弄清楚为什么这不起作用。
我在客户端写了这个:
$client = new SoapClient("Audit.wsdl");
$params=array('SerialNumber'=>'PB4LAX6JLJT7M','PercentProgress'=>'50','ResultID'=>'5');
$result=$client->__soapCall('HardDriveStatusUpdate',array($params));
然后我在服务器端写了这个:
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();
我注意到什么都没有发生。为了调试,我有写入“$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>
我构造参数的方式有问题吗?
用 __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>
真正的问题肯定是服务器端。即使所有参数都已在 SOAP 请求中发送,该函数也没有获取参数。这是为什么?我尝试了另一种方法,但仍然无法获得第二个参数。它仅适用于 FIRST 参数。