4

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

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

我也尝试过传递,'connection_timeout'=>100但它似乎是“未知的 SOAP 客户端选项”。请提出一种我可以设置设置超时的方法。

谢谢

4

5 回答 5

4

我找到了使用 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上找到

于 2013-12-11T10:06:14.323 回答
3

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

// Not used now
            // case 'connection_timeout':
            //     $this->_connection_timeout = $value;
            //    break;
于 2011-03-02T18:34:16.357 回答
2
ini_set('default_socket_timeout',$seconds);
于 2013-07-31T06:18:19.383 回答
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 请求。

完整的要点代码在这里

于 2011-12-06T12:00:27.180 回答
0

我通过使用原生 PHP SoapClient类解决了这个问题......

$client = new SoapClient($url,
            array(
                'connection_timeout'=>'30'
            ));

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

您可以使用定义整个持续时间限制

ini_set('default_socket_timeout', '30');

在调用它之前。奇迹般有效... ;)

于 2014-10-30T11:41:21.597 回答