PHP SoapClient构造函数极其缓慢

问题描述:

我想对SOAP API做一些测试,并且执行速度非常慢。我做了一些挖掘,发现它是SoapClient构造函数,它需要永久执行。我也尝试使用它的代理来查看它是否是由它产生的http查询,但是这个查询执行得相对较快..在查询之后它会持续约30秒。PHP SoapClient构造函数极其缓慢

下面是参考kcachegrind截图:

kcachegrind

下面是在查尔斯代理的WSDL查询:

charles proxy

同样的问题也得到了一个几个月前报道这里:

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

但他没有得到答案。

任何建议将不胜感激。

编辑:

其中SoapClient的启动代码部分(这是NetSuite的PHP工具包的一部分)

 $this->client = new SoapClient($host . "/wsdl/v" . $endpoint . "_0/netsuite.wsdl", 

            array( "location"    => $host . "/services/NetSuitePort_" . $endpoint, 

              "trace"     => 1, 

              "connection_timeout" => 5, 

              "typemap"    => $typemap, 

              "user_agent"   => "PHP-SOAP/" . phpversion() . " + NetSuite PHP Toolkit " . $version 

            ) 

    ); 
+1

当您第二次运行脚本并且wsdl文件已在缓存中时会发生什么?另外,您是否尝试过使用本地保存的wsdl文件并测量脚本执行时间? – Zyava

+0

我玩弄WSDL缓存无济于事。而且,正如我所说的那样,根据我在Charles Proxy中发现的内容,在WSDL被请求并返回后,挂起似乎会发生。 – Naatan

+0

检查soap.wsdl_cache_ttl选项。另外,WSDL是否可以通过纯http访问?也许ssl层是导致你身边缓慢的原因。 –

您正在使用多个用户?我在同一行代码中得到了3-20分钟的滞后,结果与多个用户有关,导致wsdl的多个副本被提取。 http://www.ozonesolutions.com/programming/2011/05/nsclient-login-time/

+0

嗨,我目前没有使用多个用户..虽然这是绝对计划由于NetSuite的会话限制。听起来像是有一些与WSDL缓存相关的错误:\ – Naatan

+0

当我尝试禁用WSDL缓存并且现在它非常快速地进行快速更新!所以它肯定是缓存。让它禁用一种吮吸......但它等待响应等待30秒。虽然你的答案不是解决方案,但它确实引导了我。 – Naatan

+3

似乎我用我的“解决方案”有点快,它不是解决它的WSDL_CACHE_NONE,而是WSDL_CACHE_MEMORY。当使用WSDL_CACHE_NONE时,它仍然需要很长时间..这很奇怪,因为它应该完全绕开问题。 – Naatan