我使用以下方法尝试为SoapClient设置超时。 $this->_soap
是Zend_Soap_Client
,其中包含SoapClient
个对象。
有时,我正在进行的API调用> 60秒我尝试设置10秒超时,但这不起作用。
1。使用stream_context_create
:
public function setTimeout($timeout)
{
$this->_soap->setStreamContext(stream_context_create(array(
'http' => array(
'timeout' => intval($timeout)
)
)));
}
2. 我尝试作为构造函数的一部分,就像在这个使用SoapClient
对象的答案(PHP SoapClient Timeout)中一样:
$this->_soap = new \Zend_Soap_Client($this->_wsdl, array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
));
但它无效,因为Zend不支持此选项并抛出Unknown SOAP client option
。
3。我试过default_socket_timeout
:
ini_set("default_socket_timeout", intval($timeout));
这些都没有奏效:
API calls times (seconds): min 0.3012 max 23.0334 avg 2.5005
我现在可以尝试,将public function setOptions($options)
附加到" \ Zend \ Soap \ Client.php"暂停,但我不想触摸Zend核心文件..
答案 0 :(得分:4)
我怀疑是否可以动态设置timeout
选项。
但是,你可以尝试这种方法吗?
$this->_soap->setSoapClient(
new SoapClient(
$this->_wsdl,
array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
)
)
);
希望它有所帮助。 感谢
答案 1 :(得分:2)
在文档中:SoapClient:
connection_timeout 选项定义连接SOAP服务的超时(以秒为单位)。此选项不会为响应缓慢的服务定义超时。要限制等待呼叫完成的时间,可以使用default_socket_timeout设置。
答案 2 :(得分:2)
关于您的试用2,问题是ZF-9125: connection_timeout option not supported in Zend_Soap_Client 有一个扩展Zend_Soap_Client作为解决方案。
也许它会对你有所帮助。 :)