Używam poniższej metody, próbując ustawić limit czasu dla SoapClient. $this->_soap
to Zend_Soap_Client
, który otula obiekt SoapClient
.SoapClient/Zend_Soap_Client z limitem czasu
Czasami połączenie API, które wykonuję, trwa> 60 sekund. Próbuję ustawić limit czasu 10 sekund, ale to nie działa.
1. Korzystanie stream_context_create
:
public function setTimeout($timeout)
{
$this->_soap->setStreamContext(stream_context_create(array(
'http' => array(
'timeout' => intval($timeout)
)
)));
}
2. Próbowałem jako części konstruktora, jak w tej odpowiedzi (PHP SoapClient Timeout), który pracuje z SoapClient
obiektu:
$this->_soap = new \Zend_Soap_Client($this->_wsdl, array(
'soap_version' => SOAP_1_1,
'connection_timeout' => intval($timeout)
));
Ale to nie działa, ponieważ Zend nie obsługuje tej opcji i rzuca Unknown SOAP client option
.
3. Próbowałem default_socket_timeout
:
ini_set("default_socket_timeout", intval($timeout));
Żaden z nich nie praca:
API calls times (seconds): min 0.3012 max 23.0334 avg 2.5005
Co ja może próbować teraz jest, aby dołączyć do public function setOptions($options)
w „\ Zend \ Soap \ Client.php "z limitem czasu, ale nie chcę dotykać plików podstawowych Zend.
Ze względu na nasze specyfikacje projektu, muszę użyć 'Zend_Soap_Client'. Może uda mi się przekonać ich do takiego rozwiązania, w przeciwnym razie muszą żyć z bardzo wolnym cronem. – DanFromGermany
@DanFromGermany: '_soap' jest nadal' Zend_Soap_Client'! Metoda 'setSoapClient' jest metodą' Zend_Soap_Client'. Jak widać w definicji klasy 'Zend_Soap_Client', używa ona klasy PHP' SoapClient'. –
Masz rację, właśnie zobaczyłem to po spojrzeniu na źródło '\ Zend \ Soap \ Client.php'. – DanFromGermany