设置超时SOAP客户端(Zend Framework)

时间:2011-03-02 17:13:28

标签: zend-framework soap zend-soap

我正在请求使用SOAP的Web服务,我需要设置请求超时。

new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl",
                       array('encoding' => 'UTF-8');

我也试过传递'connection_timeout'=>100,但它似乎是“unknow SOAP client option”。请建议一种我可以设置设置超时的方法。

由于

5 个答案:

答案 0 :(得分:3)

不支持连接超时选项,代码存在于Zend_Soap_Client中,但已注释

// Not used now
            // case 'connection_timeout':
            //     $this->_connection_timeout = $value;
            //    break;

答案 1 :(得分:3)

我找到了一个使用Zend_Framework设置超时的解决方案:

如果你有这样的SoapClient-Object:

$client = new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl", array('encoding' => 'UTF-8');

您可以设置HTTP请求的超时。 PHP中的默认超时为30秒。使用以下代码,您可以例如设置为1分钟。

$context = stream_context_create(
    array(
        'http' => array(
            'timeout' => 1000
        )
    )
);
$client->setStreamContext($context);

downlifesroad.com

上找到

答案 2 :(得分:2)

ini_set('default_socket_timeout',$seconds);

答案 3 :(得分:0)

以下是使用ZendHttpClient和Zend_Http_Client_Adapter_Curl的建议解决方案。

    $client = new Zend_Http_Client($location);
    $adapter = new Zend_Http_Client_Adapter_Curl();
    $client->setAdapter($adapter);
    $adapter->setCurlOption(CURLOPT_TIMEOUT, $this->_timeout);

    $client->setMethod(Zend_Http_Client::POST);
    $client->setHeaders('Content-Type', $version == 2 ? 
        'application/soap+xml' : 'text/xml');
    $client->setHeaders('SOAPAction', $action);

这个想法是你在请求时用SOAP信封作为字符串发送一个http请求。

完整的代码here

答案 4 :(得分:0)

我使用原生PHP SoapClient类...

解决了这个问题
$client = new SoapClient($url,
            array(
                'connection_timeout'=>'30'
            ));

$response = $client->wsMethod(array
                ('param'=>'value));

您可以使用

定义整个持续时间限制
ini_set('default_socket_timeout', '30');

在打电话之前。 像魅力一样......;)