具有超时的SoapClient/Zend_Soap_Client

Dan*_* W. 5 php soap timeout zend-framework stream

我正在使用以下方法尝试设置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)
        )
    )));
}
Run Code Online (Sandbox Code Playgroud)

2.我尝试作为构造函数的一部分,就像在这个使用object的答案(PHP SoapClient Timeout)中一样SoapClient:

    $this->_soap     = new \Zend_Soap_Client($this->_wsdl, array(
        'soap_version'       => SOAP_1_1,
        'connection_timeout' => intval($timeout)
    ));
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为Zend不支持这个选项并抛出Unknown SOAP client option.

3.我尝试default_socket_timeout:

ini_set("default_socket_timeout", intval($timeout));
Run Code Online (Sandbox Code Playgroud)

这些都没有奏效:

 API calls times (seconds):     min 0.3012      max 23.0334     avg 2.5005
Run Code Online (Sandbox Code Playgroud)

我现在可以尝试的是,public function setOptions($options)在超时后附加到"\ Zend\Soap\Client.php"中,但我不想触及Zend核心文件.

php*_*dev 4

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

不过,你能尝试一下这个方法吗?

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

希望能帮助到你。谢谢