2009-05-28 23 views
21

Estoy intentando crear una conexión jabonosa a los servicios web de Magento; sin embargo, recibo un error cuando intento crear una instancia de la clase soap client. Puedo ver el archivo wsdl en firefox sin problemas y puedo ver que php hace la solicitud de wsdl en los registros de apaches, pero aún falla. Nusoap puede conectarse.Excepción de SoapFault no capturada: error [HTTP] Obtención de encabezados http

$proxy = new SoapClient('someaddress?wsdl'); 

El error es

<b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29 
Stack trace: 
[internal function]: SoapClient-&gt;__doRequest('&lt;?xml version=&quot;...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0) 
[internal function]: SoapClient-&gt;__call('call', Array) 
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient-&gt;call(NULL, 'catalog_categor...', 5, 'giftshop') 
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...') 
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader-&gt;_ci_load(Array, '') 
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader-&gt;view('contentpage_tem...', false, true) 
[internal function]: Contentpage-&gt;index() 
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b> 

Gracias

+1

puedo estar equivocado, pero la línea con "gift_service .php (29): SoapClient- > llamada (NULL, 'catalog_categor ...', "en la pila de llamadas no parece corresponder a" $ proxy = new SoapClient "pero algo como" proxy-> catalog_categories() " ? Por favor (doble) revisa la línea 29 en gift_service.php – VolkerK

Respuesta

33

intenta establecer:

default_socket_timeout = 120 

en su archivo php.ini.

+4

Esto me ayudó en caso de que no estuviera relacionado con Magento. – mindeh

+2

Esto también se puede hacer en tiempo de ejecución con 'ini_set ('default_socket_timeout', 120)', que le dará el valor original si desea restaurarlo después. – xiuyuan

11

¿Usted intentó añadir

'trace'=>1, 

a los parámetros de creación SoapClient y luego:

var_dump($client->__getLastRequest()); 
var_dump($client->__getLastResponse()); 

para ver lo que está pasando?

+0

esto me ayuda a ver que mi solicitud de jabón carecía del parámetro correcto, pero no sé por qué mi archivo wsdl no está actualizando corr ectly. –

0

En mi registro de errores de Apache, vi:

[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25) 

Así que, eliminado todos los contenidos de mi más grande /var/log/system.log 2,1 GB de archivos de registro. Ahora todo funciona.

0

Hay un problema en la versión de PHP menos de 5.2.6. Es posible que deba actualizar la versión de php.

6

Este error puede aparecer en el cliente si hay un problema en el lado del servidor. Por ejemplo, si el servidor SOAP es un script PHP con un error de análisis, el cliente generará este mensaje.

Si tiene el control del servidor, alinee su error_log de Apache en la máquina que aloja el servidor SOAP. En CentOS se encuentra esta en/var/log/httpd/error_log, por lo que el comando es:

tail -f/var/log/httpd/error_log

Ahora refrescar el cliente y el reloj para el mensaje de error . Se mostrarán todos los errores de PHP con el script del servidor.

Espero que ayude a alguien.

1

Si se trata de un problema relacionado con Magento, debe desactivar el reindexado automático ya que esto podría causar que el socket expire (caduque). Puede volver a activarlo una vez que el script haya terminado sus tareas. Aumentar el tiempo de espera predeterminado del socket en php.ini también es una buena idea.

4

Me enfrenté al mismo problema.
Lo estaba ejecutando como CLI.Por lo tanto, PHP siempre se estaba ejecutando y tenía que hacer una llamada jazmín una y otra vez después de un intervalo.
El error que cometí fue utilizar un patrón singleton para esto. Pensé uso de Singleton causará aumento de rendimiento, pero inturn llegué

Error Fetching http headers in ... 

me fijo mediante la creación de nuevo objeto saop para cada llamada.

0

por favor, actualice su php.ini con

default_socket_timeout = 120 

Usted puede crear sus propios php.ini si PHP está instalado un CGI en lugar de un módulo de Apache

Cuestiones relacionadas