我正在请求使用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”。请建议一种我可以设置设置超时的方法。
由于
答案 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);
上找到
答案 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');
在打电话之前。 像魅力一样......;)