我正在使用需要设置请求超时的 SOAP 请求 Web 服务。
new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl",
array('encoding' => 'UTF-8');
我也尝试过传递,'connection_timeout'=>100
但它似乎是“未知的 SOAP 客户端选项”。请提出一种我可以设置设置超时的方法。
谢谢
我正在使用需要设置请求超时的 SOAP 请求 Web 服务。
new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl",
array('encoding' => 'UTF-8');
我也尝试过传递,'connection_timeout'=>100
但它似乎是“未知的 SOAP 客户端选项”。请提出一种我可以设置设置超时的方法。
谢谢
我找到了使用 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);
不支持连接超时选项,代码存在于 Zend_Soap_Client 中但已注释
// Not used now
// case 'connection_timeout':
// $this->_connection_timeout = $value;
// break;
ini_set('default_socket_timeout',$seconds);
这是使用 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 请求。
完整的要点代码在这里
我通过使用原生 PHP SoapClient类解决了这个问题......
$client = new SoapClient($url,
array(
'connection_timeout'=>'30'
));
$response = $client->wsMethod(array
('param'=>'value));
您可以使用定义整个持续时间限制
ini_set('default_socket_timeout', '30');
在调用它之前。奇迹般有效... ;)