我是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友好目录。
我的问题是双重的:
为什么SoapClient构造函数看起来随机执行需要多长时间?为什么通常需要更长时间,但有时只需要一瞬间?我是否可以通过测试来了解它为什么会这样做?
我应该缓存/保存SoapClient对象或资源,这样当我的页面访问者从一个页面移动到另一个页面时,我不需要创建一个新的SoapClient并再次重新解析WSDL吗?建议的方法是什么?
任何正确方向的帮助或推动都是非常有必要的。谢谢。
答案 0 :(得分:11)
TTL定义了WSDL在缓存中的存在时间。
soap.wsdl_cache_ttl integer
设置将使用缓存文件而不是原始文件的秒数(生存时间)。
http://www.php.net/manual/en/soap.configuration.php#ini.soap.wsdl-cache-ttl
您也可以将WSDL下载到本地文件系统并将其用作SoapClient
$client = new SoapClient("file://path/wsdl.file", array(
'location' => "http://domain/ws-endpoint",
));