おそらく、ApacheとIISサーバー間の接続を確立できません。以下を確認する必要があります。
- Apacheサーバーからの8080(着信ではなく発信)ポートをブロックする可能性のあるファイアウォール、マルウェア対策プログラムなどはありますか?
- サーバーに接続するために必要なSSL証明書またはパスワード(あるいはその両方)はありますか?はいの場合、適切なヘッダーを設定するようにPHPに指示する必要があります。
- デフォルトのSoapClientを、curlを直接使用するものに置き換えることをお勧めします。そこで、いくつかのcurlパラメータを設定し、実際のエラーについて確認することができます。
このような:
class SoapCurlWrapper extends SoapClient {
protected function callCurl($url, $data, $action) {
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml", 'SOAPAction: "' . $action . '"'));
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
curl_setopt($handle, CURLOPT_SSLVERSION, 3);
$response = curl_exec($handle);
if (empty($response)) {
throw new SoapFault('CURL error: '.curl_error($handle),curl_errno($handle));
}
curl_close($handle);
return $response;
}
public function __doRequest($request,$location,$action,$version,$one_way = 0) {
return $this->callCurl($location, $request, $action);
}
}
PHPのSOAP実装は、WSDLファイルをダウンロードするために上記のラッパーを使用しないことに注意してください(手動で行う必要があります)が、実際のWS呼び出しに使用でき、実際に失敗する理由を見つけることができます。
そして、あなたは他のように上記のクラスを使うことができますSoapClient
、例えば:
$oWS = new SoapCurlWrapper($location_of_wsdl_file,$parameters);