9

私は Web サービスを初めて使用します。不可解にランダムな SoapClient コンストラクターの実行時間が発生しています。通常、呼び出しには約 10 秒かかります。1 秒もかからないこともありますが、それほど頻繁ではありません。

PHP SoapClientコンストラクターが非常に遅い

PHP: SoapClient コンストラクターが非常に遅い (3 分かかる)

WCF Web サービスへの接続が不可解に遅い

私の状況は上記のスレッドのものと似ていますが、それらで提供された解決策では問題が解決しませんでした。

// config params
$params = array(
    'trace'        => 1,
    'soap_version' => SOAP_1_1,
    'cache_wsdl'   => WSDL_CACHE_MEMORY
);
// this call takes about 10 seconds to remote WSDL
$soap_client = new SoapClient(WSDL_URL,$params);

さまざまな wsdl キャッシング パラメータを試してみたところ、WSDL_CACHE_MEMORY が最速であることがわかりました。他のキャッシュ オプションを使用する場合、呼び出しには平均で約 25 秒かかります。

複数のユーザーを使用していません。

php.ini で wsdl_cache_dir を Windows に適したディレクトリに変更しました。

私の質問は 2 つあります。

  1. SoapClient コンストラクターの実行時間がランダムに見えるのはなぜですか? 通常はもっと時間がかかるのに、ほんの一瞬しかかからないことがあるのはなぜですか? なぜこのように動作するのかを知るために実行できるテストはありますか?

  2. ページの訪問者がページからページに移動するときに、新しい SoapClient を作成して WSDL を再度解析する必要がないように、SoapClient オブジェクトまたはリソースをキャッシュ/保存する必要がありますか? それを達成するための推奨されるアプローチは何ですか?

正しい方向への助けや微調整は、非常に義務付けられています。ありがとうございました。

4

1 に答える 1

11

TTL を確認する

TTL は、WSDL がキャッシュに存在する期間を定義します。

 soap.wsdl_cache_ttl integer

元のファイルの代わりにキャッシュされたファイルが使用される秒数 (存続時間) を設定します。

http://www.php.net/manual/en/soap.configuration.php#ini.soap.wsdl-cache-ttl

WSDL をローカルに保存する

また、WSDL をローカル ファイル システムにダウンロードし、それをソースとして使用することもできます。SoapClient

$client = new SoapClient("file://path/wsdl.file", array(
    'location' => "http://domain/ws-endpoint",
));
于 2013-03-29T12:54:00.590 に答える