1

php5のSOAP拡張機能を使用してSOAPWebサービスを利用しています。サービスのwsdlはAxisjava2wsdlを使用して生成され、生成中に使用されるオプションはすべて、ポートバインディングURLがhttps://xxx.xxx.xxx.xxx **:80**としてリストされる結果になります。

wsdlをサーバーにダウンロードし、ポートバインディングの場所の値からポート80の仕様を削除し、soapclient呼び出しでローカルファイルを参照すると、正常に機能します。

ただし、リモートで参照しようとすると(またはダウンロードしてローカルでそのまま参照しようとすると)、soap障害で呼び出しが失敗します。

サービス側への入力がないため、wsdl生成プロセスを変更させることはできません。したがって、soapclientにポートを認識させない方法がない限り、他の誰かのwsdlのローカルで変更されたコピーを使用することに固執します(私はむしろそうしません)。

私のsoapclientにポート80を無視させる方法について何か考えはありますか?

4

2 に答える 2

2

SoapClientのコンストラクターに2番目の引数として渡すことができる$options配列を使用して、ホスト名/ポートをオーバーライドしてみてください。

$client = new SoapClient("some.wsdl", array('proxy_host' => "https://example.org", 'proxy_port' => 443);

于 2009-09-17T15:57:08.103 に答える
2

より洗練された解決策が見つからない場合は、いつでもファイルをダウンロードし、文字列の置換を行ってから、それをWSDLとして使用できます。

$cached_wsdl_file = './cached_wsdl.xml';
if (filemtime($cached_wsdl_file) > time() - 3600) {
    $wsdl = file_get_contents('http://server/service?wsdl');
    $wsdl = str_replace('server:80', 'server', $wsdl);
    file_put_contents($cached_wsdl_file, $wsdl);
}
$client = new SoapClient($cached_wsdl_file);
于 2009-11-09T01:33:01.260 に答える