2014-05-21 32 views
5

Tôi đang sử dụng phương pháp sau đây cố gắng đặt thời gian chờ cho SoapClient. $this->_soapZend_Soap_Client kết thúc một đối tượng SoapClient.SoapClient/Zend_Soap_Client với thời gian chờ

Đôi khi cuộc gọi API tôi đang thực hiện mất> 60 giây. Tôi đang cố gắng thiết lập thời gian chờ 10 giây nhưng điều này không hiệu quả.

1. Sử dụng stream_context_create:

public function setTimeout($timeout) 
{ 
    $this->_soap->setStreamContext(stream_context_create(array(
     'http' => array(
      'timeout' => intval($timeout) 
     ) 
    ))); 
} 

2. tôi đã cố gắng như là phần của các nhà xây dựng, như trong câu trả lời này (PHP SoapClient Timeout) được làm việc với SoapClient đối tượng:

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

Nhưng nó không hoạt động vì Zend không hỗ trợ tùy chọn này và ném Unknown SOAP client option.

3. tôi đã cố gắng default_socket_timeout:

ini_set("default_socket_timeout", intval($timeout)); 

Không ai trong số những người đã làm việc:

API calls times (seconds):  min 0.3012  max 23.0334  avg 2.5005 

Những gì tôi có thể thử bây giờ là, để phụ thêm vào public function setOptions($options) trong "\ Zend \ Soap \ Client.php "với thời gian chờ, nhưng tôi không muốn chạm vào tập tin lõi Zend ..

Trả lời

4

Tôi nghi ngờ rằng thiết lập động tùy chọn timeout là có thể.

Tuy nhiên, bạn có thể thử phương pháp này không?

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

Hy vọng điều đó sẽ hữu ích. Cảm ơn

+0

Do thông số kỹ thuật của dự án của chúng tôi, tôi phải sử dụng 'Zend_Soap_Client'. Có lẽ tôi có thể thuyết phục họ giải pháp này, nếu không họ phải sống với một cronjob rất chậm. – DanFromGermany

+1

@DanFromGermany: '_soap' vẫn là' Zend_Soap_Client'! Phương thức 'setSoapClient' là phương thức' Zend_Soap_Client'. Như bạn có thể thấy trong định nghĩa lớp 'Zend_Soap_Client', nó là nội bộ sử dụng lớp PHP' SoapClient'. –

+0

Bạn nói đúng, tôi chỉ thấy điều này sau khi xem nguồn gốc của '\ Zend \ Soap \ Client.php'. – DanFromGermany

2

Trong tài liệu: SoapClient:

Các connection_timeout tùy chọn định nghĩa một thời gian chờ trong vài giây để kết nối với dịch vụ SOAP. Tùy chọn này không xác định thời gian chờ cho các dịch vụ có phản hồi chậm. Để giới hạn thời gian chờ cuộc gọi kết thúc, cài đặt default_socket_timeout khả dụng.

Các vấn đề liên quan