Установить время ожидания SOAP-клиента (Zend Framework) - PullRequest
4 голосов
/ 02 марта 2011

Я запрашиваю веб-сервис с использованием SOAP, для которого мне нужно установить тайм-аут запроса.

new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl",
                       array('encoding' => 'UTF-8');

Я также пытался передать 'connection_timeout'=>100, но это похоже на "неизвестный параметр клиента SOAP".Пожалуйста, предложите способ, которым я могу установить установленное время ожидания.

Спасибо

Ответы [ 5 ]

3 голосов
/ 11 декабря 2013

Я нашел решение для установки времени ожидания с Zend_Framework:

Если у вас есть объект SoapClient, подобный этому:

$client = new Zend_Soap_Client(http://www.aaa.com/ws/Estimate.asmx?wsdl", array('encoding' => 'UTF-8');

Вы можете установить тайм-аут для HTTP-запросов. Тайм-аут по умолчанию в PHP составляет 30 секунд. С помощью следующего кода вы можете, например, установите его на 1 минуту.

$context = stream_context_create(
    array(
        'http' => array(
            'timeout' => 1000
        )
    )
);
$client->setStreamContext($context);

Найдено на downlifesroad.com

3 голосов
/ 02 марта 2011

Параметр времени ожидания подключения не поддерживается, код присутствует в Zend_Soap_Client, но прокомментирован

// Not used now
            // case 'connection_timeout':
            //     $this->_connection_timeout = $value;
            //    break;
2 голосов
/ 31 июля 2013
ini_set('default_socket_timeout',$seconds);
0 голосов
/ 30 октября 2014

Я решил эту проблему, используя собственный PHP SoapClient class ...

$client = new SoapClient($url,
            array(
                'connection_timeout'=>'30'
            ));

$response = $client->wsMethod(array
                ('param'=>'value));

Вы можете определить весь предел продолжительности, используя

ini_set('default_socket_timeout', '30');

Перед вызовомЭто.Работает как шарм ...;)

0 голосов
/ 06 декабря 2011

Вот предлагаемое решение с использованием ZendHttpClient и Zend_Http_Client_Adapter_Curl.

    $client = new Zend_Http_Client($location);
    $adapter = new Zend_Http_Client_Adapter_Curl();
    $client->setAdapter($adapter);
    $adapter->setCurlOption(CURLOPT_TIMEOUT, $this->_timeout);

    $client->setMethod(Zend_Http_Client::POST);
    $client->setHeaders('Content-Type', $version == 2 ? 
        'application/soap+xml' : 'text/xml');
    $client->setHeaders('SOAPAction', $action);

Идея состоит в том, что вы отправляете HTTP-запрос с конвертом SOAP в качестве строки в запросе.

Полный суть здесь

...