PHP SoapClient构造函数非常慢

cre*_*lue 9 php soap wsdl

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

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);
Run Code Online (Sandbox Code Playgroud)

我玩过不同的wsdl缓存参数,发现WSDL_CACHE_MEMORY是最快的.使用其他缓存选项时,通话平均需要大约25秒.

我没有使用多个用户.

我已将wsdl_cache_dir更改为php.ini中的Windows友好目录.

我的问题是双重的:

  1. 为什么SoapClient构造函数在执行需要多长时间内似乎是随机的?为什么通常需要更长时间,但有时只需要一瞬间?我可以进行一项测试来了解它为什么会这样做吗?

  2. 我应该缓存/保存SoapClient对象或资源,以便当我的页面访问者从一个页面移动到另一个页面时,我不需要创建一个新的SoapClient并再次重新解析WSDL吗?建议的方法是什么?

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

Mak*_*s3w 11

检查TTL

TTL定义了WSDL在缓存中存在的时间.

 soap.wsdl_cache_ttl integer
Run Code Online (Sandbox Code Playgroud)

设置将使用缓存文件而不是原始文件的秒数(生存时间).

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",
));
Run Code Online (Sandbox Code Playgroud)