具有超时的SoapClient / Zend_Soap_Client

时间:2014-05-21 08:50:01

标签: php zend-framework soap stream timeout

我使用以下方法尝试为SoapClient设置超时。 $this->_soapZend_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核心文件..

3 个答案:

答案 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作为解决方案。

也许它会对你有所帮助。 :)