2011-12-02 17 views
7

Cuando intento acceder a una función en wsdl con algunos datos (usando el cliente soap en php) recibo el siguiente error.Excepción SoapFault no capturada: [Cliente] La función no es un método válido para este servicio

Uncaught SoapFault exception: [Client] Function function_nameis not a valid method for this service 

¿Algún ayuda?

+1

es que el error real? Porque si es así, supongo que ha tomado un archivo de plantilla del proveedor del servicio e intentado realizar una llamada a una función de servicio llamada 'nombre_función', que es poco probable que sea el nombre real de una función. Se supone que debes reemplazar 'function_name' con el nombre de la función a la que estás llamando, es solo un marcador de posición para mostrarte dónde iría el nombre de la función. El proveedor de servicios probablemente proporcione documentación. Te sugiero que lo leas. Correctamente. – DaveRandom

+0

Hola, Dave, gracias por la respuesta. Ese no es el mensaje de error original. Reemplacé el nombre de la función real con 'nombre_función' –

+0

Bueno, el error te dice que el nombre de la función no es válido para ese servicio que estás tratando de consumir. -verifique los documentos y asegúrese de que el nombre de la función sea válido, y si lo es, póngase en contacto con el proveedor del servicio. – DaveRandom

Respuesta

25

Si desea ejecutar una función que SOAP no puede encontrar, es posible que PHP haya guardado en caché el archivo wsdl.

Añadir este:

ini_set("soap.wsdl_cache_enabled", "0"); 

para deshabilitar el almacenamiento en caché.

+0

me ayuda!Gracias – Talisin

+0

a salvo mi vida – tingfungc

+0

Agregué esta línea, aún obtengo el mismo error, ¿qué debo hacer? – Saani

2

dos soluciones posibles:

  1. tratar de ver si la función realmente existe con el fragmento de código que hay: PHP SoapClient request: not a valid method for this service
  2. Además, una vez que haya visualizado la lista de llamadas a funciones, se ocupa de que si su WSDL es generado por un servidor Java SOAP, es posible que tenga varias funciones llamadas "servicio" (o con el mismo nombre). Solo el primero será reconocido y utilizado por el cliente PHP SOAP. ¡Necesitas cambiar el nombre manualmente en WSDL!
0

Simplemente agregue los parámetros, tipo de retorno y método de servicio web en los comentarios en la parte superior de la función. Funcionará. Intenté su funcionamiento.

/** 
* @param string the symbol of the stock 
* @return float the stock price 
* @soap 
*/ 
public function getPrice($symbol) 
{ 
    //...return stock price for $symbol 
} 
0

Tuve este problema y finalmente decidí consultar mi registro de errores de php.

En php.ini permiten always_populate_raw_post_data = -1 y reiniciar el servidor.

Mi versión de PHP es 5.6.8

Cuestiones relacionadas