SoapClient / Zend_Soap_Client with timeout



我正在使用以下方法尝试为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作为解决方案。

也许它会帮助你。:)

相关内容

  • 没有找到相关文章

最新更新