Tôi đang sử dụng phương pháp sau đây cố gắng đặt thời gian chờ cho SoapClient. $this->_soap
là Zend_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 ..
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
@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'. –
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