【问题标题】:SoapClient / Zend_Soap_Client with timeoutSoapClient / Zend_Soap_Client 超时
【发布时间】:2014-07-09 19:24:30
【问题描述】:

我正在使用以下方法尝试为 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 核心文件..

【问题讨论】:

    标签: php zend-framework soap stream timeout


    【解决方案1】:

    我怀疑动态设置timeout 选项是否可行。

    但是,你可以试试这个方法吗?

    $this->_soap->setSoapClient(
        new SoapClient(
            $this->_wsdl, 
            array(
                'soap_version'       => SOAP_1_1,
                'connection_timeout' => intval($timeout)
            )
        )
    );
    

    希望对您有所帮助。 谢谢

    【讨论】:

    • 由于我们的项目规范,我必须使用Zend_Soap_Client。也许我可以说服他们接受这个解决方案,否则他们必须忍受一个非常慢的 cronjob。
    • @DanFromGermany : _soap 仍然是 Zend_Soap_ClientsetSoapClient 方法是 Zend_Soap_Client 方法。正如您在 Zend_Soap_Client 类定义中看到的那样,它在内部使用 PHP SoapClient 类。
    • 你说得对,我是看了\Zend\Soap\Client.php的出处才看到这个的。
    【解决方案2】:

    在文档中:SoapClient

    connection_timeout 选项定义了连接到 SOAP 服务的超时时间(以秒为单位)。此选项不为响应缓慢的服务定义超时。要限制等待呼叫完成的时间,可以使用default_socket_timeout 设置。

    【讨论】:

      【解决方案3】:

      关于您的试用版 2,有问题 ZF-9125: connection_timeout option not supported in Zend_Soap_Client
      有一个扩展 Zend_Soap_Client 作为解决方案。

      也许它会帮助你。 :)

      【讨论】:

      • 有趣!谢谢链接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2012-02-25
      • 2021-10-08
      • 1970-01-01
      • 2015-01-13
      • 2018-06-13
      相关资源
      最近更新 更多