En uno de los proyectos en los cuales estoy trabajando ahora mismo, necesitaba la implementación de un entorno cliente – servidor SOAP. El servidor, vamos a decir que debido a motivos de ecosistema, lo implemente con Delphi, y el cliente con PHP.
Bien, una vez el entorno implementado, y después de hacer las pruebas pertinentes entre el cliente y servidor, los que yo denomino test de «hola mundo», me puse a implementar los servicios que necesitaba, y aquí comenzaron los problemas.
Aparentemente estaba todo bien, pero el servidor me devolvia este error:
Uncaught SoapFault exception: [Client] Function function_nameis not a valid method for this service
Pues bien todo el problema venia que el cliente tenia almacenado en cache los servicios anteriores, y no los nuevos. Podemos solucionar este error de varias maneras. Una seria deshabilitando la cache wsdl en tiempo de ejecución, asi prevenimos que si implementamos servicios nuevos, el cliente no lo reconozca. Que decir que esta opción esta bien en desarrollo, ya que una vez que este todo establecido definitivamente lo podemos deshabilitar.
ini_set("soap.wsdl_cache_enabled", "0");
Otra manera de hacerlo seria, si usamos la clase SoapClient para crear el cliente SOAP, es pasándolo como parámetro en la creación del objeto
$clienteSoap = new SoapClient('http://misitio.com?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE));
Muy buena recomendación, sin embargo el problema que tengo es el siguiente:
SoapClient::SoapClient() [soapclient.soapclient0]: SSL: connection timeout
Estoy usando la clase Soap.