我正在使用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参数.
我用你提供的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();),这是结果
:
| 归档时间: |
|
| 查看次数: |
11961 次 |
| 最近记录: |