私は 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」でファイルに書き込む機能がありました。最初の引数だけを取得していたことがわかりましたが、2 番目と 3 番目の引数は空でした。(「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 要求で既に送信されているにもかかわらず、関数は引数を取得していません。何故ですか?別の方法を試しましたが、それでも 2 番目の引数を取得できません。FIRST 引数でのみ機能します。