Sto usando il seguente metodo cercando di impostare un timeout su SoapClient. $this->_soap
è un Zend_Soap_Client
che include un oggetto SoapClient
.SoapClient/Zend_Soap_Client con timeout
A volte la chiamata API che sto facendo richiede> 60 secondi. Sto cercando di impostare un timeout di 10 secondi, ma questo non funziona.
1. Uso stream_context_create
:
public function setTimeout($timeout)
{
$this->_soap->setStreamContext(stream_context_create(array(
'http' => array(
'timeout' => intval($timeout)
)
)));
}
2. ho provato come parte del costruttore, come in questa risposta (PHP SoapClient Timeout) che sta lavorando con SoapClient
oggetto:
$this->_soap = new \Zend_Soap_Client($this->_wsdl, array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
));
Ma non funziona perché Zend non supporta questa opzione e genera Unknown SOAP client option
.
3. ho cercato default_socket_timeout
:
ini_set("default_socket_timeout", intval($timeout));
Nessuno di coloro che hanno fatto un lavoro:
API calls times (seconds): min 0.3012 max 23.0334 avg 2.5005
Quello che potuto provare ora è, da aggiungere al public function setOptions($options)
in "\ Zend \ Soap \ Client.php "con un timeout, ma non voglio toccare i file core di Zend ..
A causa delle nostre specifiche di progetto, devo usare il 'Zend_Soap_Client'. Forse posso convincerli a questa soluzione, altrimenti devono vivere con un cronjob molto lento. – DanFromGermany
@DanFromGermany: '_soap' è ancora un' Zend_Soap_Client'! Il metodo 'setSoapClient' è un metodo' Zend_Soap_Client'. Come puoi vedere nella definizione di classe 'Zend_Soap_Client', internamente usa la classe' SoapClient' di PHP. –
Hai ragione, l'ho appena visto dopo aver visto la fonte di '\ Zend \ Soap \ Client.php'. – DanFromGermany