PHP SoapClient构造函数非常慢

时间:2013-03-28 21:28:21

标签: php soap wsdl

我是Web Services的新手。我遇到了莫名其妙的随机SoapClient构造函数执行时间。通常呼叫大约需要10秒钟。有时需要不到一秒钟,但这种情况不太常见。

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对象或资源,这样当我的页面访问者从一个页面移动到另一个页面时,我不需要创建一个新的SoapClient并再次重新解析WSDL吗?建议的方法是什么?

  3. 任何正确方向的帮助或推动都是非常有必要的。谢谢。

1 个答案:

答案 0 :(得分: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",
));