XMLRPC, вызывающий SOAP, должен возвращать ответ, а не падать / умирать - PullRequest
0 голосов
/ 30 декабря 2010

Итак, у меня есть XMLRPC, разработанный в Zend PHP, который вызывает SOAP-запрос для запуска другого процесса (SOAP - это не мой скрипт, а XMLRPC).

Во время запроса SOAP, если хост не найден, этот иногда завершает мой вызов XMLRPC. Как я могу вернуть запрос XMLRPC с ответом вместо ошибки? Логика выглядит хорошо? Я знаю, что все функции работают, и я получил желаемый ответ (иногда), но мне нужно убедиться, что скрипт не падает. Какие-нибудь мысли? советы?

Вот что у меня есть

try {
   $soap_call = new ReportSoapClient();
   $soap_call->RunReport();
} catch(Exception $e) {
   // Set the Error Alert Email Message
   $this->setErrorAlertMessage($this->getErrorAlertMessage()."ERROR: SOAP Exception: ".$e->getMessage());
   // Send the Email
   $this->sendErrorAlertEmail();

   // This set the XMLRPC Response 
   $this->setXMLRPCResponse('Code: '.$e->getCode().' Message: '.$e->getMessage());
   // This is a logger
   $this->debug('Code: '.$e->getCode().' Message: '.$e->getMessage());
   // Return the XMLRPC Response
   return $this->getXMLRPCResponse();
} 

Вот электронное письмо, которое я получаю:

ERROR: SOAP Exception: Could not connect to host

Вот ошибка, которую я получаю при сбое (случается только иногда, почему ???):

Fatal error: Uncaught exception 'Zend_Http_Client_Adapter_Exception' with message 'Read timed out after 10 seconds' in /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php:512
Stack trace:
#0 /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php(330): Zend_Http_Client_Adapter_Socket->_checkSocketReadTimeout()
#1 /usr/share/php/libzend-framework-php/Zend/Http/Client.php(989): Zend_Http_Client_Adapter_Socket->read()
#2 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client.php(280): Zend_Http_Client->request('POST')
#3 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client.php(361): Zend_XmlRpc_Client->doRequest(Object(Zend_XmlRpc_Request))
#4 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client/ServerProxy.php(93): Zend_XmlRpc_Client->call('system.multical...', Array)
#5 [internal function]: Zend_XmlRpc_Client_ServerProxy->__call('multicall', Array)
#6 /path/to/xmlrpc.client.php(70): Zend_XmlRpc_Client_ServerProxy->multicall(Array)
#7 {main}
  thrown in /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php on line 512

I увеличил время ожидания до 30 секунд (<- ссылка: если вам нужно посмотреть, как это сделать), а иногда я получаю это: (опять почему ???): </p>

Fatal error: Uncaught exception 'Zend_Http_Client_Adapter_Exception' with message 'Read timed out after 30 seconds' in /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php:512
Stack trace:
#0 /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php(330): Zend_Http_Client_Adapter_Socket->_checkSocketReadTimeout()
#1 /usr/share/php/libzend-framework-php/Zend/Http/Client.php(989): Zend_Http_Client_Adapter_Socket->read()
#2 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client.php(280): Zend_Http_Client->request('POST')
#3 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client.php(361): Zend_XmlRpc_Client->doRequest(Object(Zend_XmlRpc_Request))
#4 /usr/share/php/libzend-framework-php/Zend/XmlRpc/Client/ServerProxy.php(93): Zend_XmlRpc_Client->call('system.multical...', Array)
#5 [internal function]: Zend_XmlRpc_Client_ServerProxy->__call('multicall', Array)
#6 /path/to/xmlrpc.client.php(23): Zend_XmlRpc_Client_ServerProxy->multicall(Array)
#7  in /usr/share/php/libzend-framework-php/Zend/Http/Client/Adapter/Socket.php on line 512

Вот что иногда возвращается (это желаемый ответ):

Code: 0 Message: Could not connect to host

1 Ответ

0 голосов
/ 17 января 2011

произошел сбой SOAP-процесса и он не выдавал ошибку должным образом.тьфу

...