2014-05-21 26 views
5

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.

Odpowiedz

4

Wątpię, czy możliwe jest dynamiczne ustawienie opcji timeout.

Można jednak wypróbować tę metodę?

$this->_soap->setSoapClient(
    new SoapClient(
     $this->_wsdl, 
     array(
      'soap_version'  => SOAP_1_1, 
      'connection_timeout' => intval($timeout) 
     ) 
    ) 
); 

Mam nadzieję, że to pomaga. Dzięki

+0

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

+1

@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'. –

+0

Masz rację, właśnie zobaczyłem to po spojrzeniu na źródło '\ Zend \ Soap \ Client.php'. – DanFromGermany

2

W dokumentacji: SoapClient:

TIMEOUT_POLACZENIA opcja określa limit czasu w sekundach do podłączenia do serwisu SOAP. Ta opcja nie określa limitu czasu dla usług z powolnymi odpowiedziami. Aby ograniczyć czas oczekiwania na zakończenie połączeń, dostępne jest ustawienie default_socket_timeout.

Powiązane problemy