我正在使用以下方法尝试为 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
我现在可以尝试的是,将超时附加到“\Zend\Soap\Client.php”中的public function setOptions($options)
,但我不想触及 Zend 核心文件..
最佳答案
我怀疑动态设置 timeout
选项是否可行。
但是,你能试试这个方法吗?
$this->_soap->setSoapClient(
new SoapClient(
$this->_wsdl,
array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
)
)
);
希望对您有所帮助。 谢谢
关于php - 带有超时的 SoapClient/Zend_Soap_Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778326/