php - 带有超时的 SoapClient/Zend_Soap_Client

标签 php zend-framework soap stream timeout

我正在使用以下方法尝试为 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/

相关文章:

php - 在 PHP CLI 解释器中重新定义 PHP 函数

php - PHP中的文件私有(private)变量

php - Zend Framework - Zend_Form 装饰器问题

php - 社交网站的 Zend、Yii 和 CI

javascript - Zend Framework CSS/JS minifier-obfuscator?

http - REST 是否在请求的 URL 中发送其负载? SOAP 呢?

xml - 读取 XML 属性 VBA

php - 在 SQL 查询中使用 $object->get_variable() [PHP]

php - 提交表单时的多个 if 场景

java - SOAP webservice如何支持ACID属性