9

我是 Web 服务的新手。我正在经历莫名其妙的随机 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);

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

我没有使用多个用户。

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

我的问题有两个:

  1. 为什么 SoapClient 构造函数的执行时间看起来是随机的?为什么通常需要更长的时间,但有时只需要一秒钟?有没有我可以执行的测试来了解它为什么会这样?

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

任何朝着正确方向的帮助或推动都将非常有义务。谢谢你。

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 回答