2013-03-28 11 views
9

私はWebサービスを初めて使用しています。私は、不可解にランダムなSoapClientコンストラクタの実行時間を経験しています。通常、通話には約10秒かかります。場合によっては1秒未満がかかることもありますが、この頻度は少なくなります。PHP SoapClientコンストラクタが非常に遅い

PHP SoapClient Constructor extremely slow

PHP: SoapClient constructor is very slow (takes 3 minutes)

Connecting to WCF Web Service is inexplicably slow

私の状況は上記のスレッドと同様であるが、それらに提供ソリューションは、私の問題は解決しませんでした。

// 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秒かかります。

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

私はwsdl_cache_dirをphp.iniのWindowsフレンドリーなディレクトリに変更しました。

私の質問は二つある:

  1. なぜのSoapClientコンストラクタは、それが実行にかかる時間で、一見ランダムなのですか?なぜそれは通常より長い時間がかかるのですか?このように動作する理由を知るために実行できるテストはありますか?

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

正しい方向のヘルプやナッジは、非常に義務付けられています。ありがとうございました。

+0

のソースとしてそれを使用することができますが、ローカルまたはリモートのwsdlファイルですか? – datasage

+0

@datasage私は両方を試しました。まずローカル、次にリモート。リモートでの実行時間の短縮 – cre8value

+0

soapui - http://www.soapui.org/でテストクライアントを作成しようとするとそれも遅いですか? – herrjeh42

答えて

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", 
)); 
+0

+1ローカルコピーのアイデア。 – GordonM