我正在使用以下方法尝试为SoapClient设置超时。$this->_soap
是包含SoapClient
对象的Zend_Soap_Client
。
有时我正在做的API调用需要> 60秒。我试图设置一个10秒的超时,但这不起作用。
1。使用stream_context_create
:
public function setTimeout($timeout)
{
$this->_soap->setStreamContext(stream_context_create(array(
'http' => array(
'timeout' => intval($timeout)
)
)));
}
2。我尝试作为构造函数的一部分,就像在这个答案(PHP SoapClient超时),这是与SoapClient
对象工作:
$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
我可以尝试现在是,在"ZendSoapClient.php"中超时附加到public function setOptions($options)
,但我不想触摸Zend核心文件..
我怀疑动态设置timeout
选项是可能的。
但是,你能试试这个方法吗?
$this->_soap->setSoapClient(
new SoapClient(
$this->_wsdl,
array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
)
)
);
希望有帮助。由于
文档中:SoapClient:
connection_timeout选项为连接到SOAP服务定义了以秒为单位的超时。此选项不为响应缓慢的服务定义超时。要限制等待调用完成的时间,可以使用default_socket_timeout设置。
关于您的试用2,存在ZF-9125: connection_timeout选项在Zend_Soap_Client中不支持的问题。
有一个扩展Zend_Soap_Client作为解决方案。
也许它会帮助你。:)