2012-05-30 10 views
12

De acuerdo, creo que necesito otro par de ojos para ver esto. Estoy haciendo una llamada simple de php soapclient a un servicio web echo en un servidor remoto. Estoy bastante seguro de que no tengo ningún error tipográfico y que la llamada a la función es correcta. Sin embargo, recibo un error fatal al afirmar que la función no es un método válido. A continuación se muestra un var_dump de los tipos de servicios web.Solicitud de PHP SoapClient: no es un método válido para este servicio

array(4) { [0]=> string(88) "struct EspException { string Code; string Audience; string Source; string Message; }" [1]=> string(71) "struct ArrayOfEspException { string Source; EspException Exception; }" [2]=> string(43) "struct EchoTestRequest { string ValueIn; }" [3]=> string(45) "struct EchoTestResponse { string ValueOut; }" }

Fatal error: Uncaught SoapFault exception: [Client] Function ("EchoTestRequest") is not a valid method for this service in /home/grafixst/public_html/cpaapp/echo_test.php:38 Stack trace: #0 /home/grafixst/public_html/cpaapp/echo_test.php(38): SoapClient->__call('EchoTestRequest', Array) #1 /home/grafixst/public_html/cpaapp/echo_test.php(38): SoapClientAuth->EchoTestRequest(Array) #2 {main} thrown in /home/grafixst/public_html/cpaapp/drew/echo_test.php on line 38

Aquí está el código que estoy usando para hacer la llamada:

<?php 

    require_once('SoapClientAuth.php'); 

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

    #- Loading the WSDL document 
    $server = "https://wsonline.seisint.com/WsAccurint/EchoTest?ver_=1.65"; 
    $wsdl = $server . "&wsdl";  

    $client = new SoapClientAuth($wsdl, 
     array(
       'login' => $username, 
       'password' => $password 
      )); 

    $types = $client->__getTypes(); 

    var_dump($types); 

    echo "</br>"; 

    $req = $client->EchoTestRequest(array('ValueIn' => 'echo')); 

    print $req->ValueOut; 
    echo "</br>"; 
?> 

Respuesta

42

una simple solicitud de funciones disponibles del servicio web resuelto el problema.

$functions = $client->__getFunctions(); 
var_dump ($functions); 

EchoTestRequest no era una llamada de función válida. La llamada de función adecuada fue EchoTest, que se ilustra con las funciones de volcado variable.

array(1) { [0]=> string(54) "EchoTestResponse EchoTest(EchoTestRequest $parameters)" } 
+1

¡Esto me salvó el día! si una función aparece en WSDL pero no puede llamarla, verifique esta respuesta, ya que revelará todas las funciones disponibles. – diynevala

+0

Después de darme cuenta de que el método no estaba en la lista, agregué "? V = 1" a wsdl url y el nuevo wsdl se cargó con el nuevo método disponible. – wormhit

+1

Me encontré con un problema similar e intenté su respuesta, arreglé el archivo WSDL. var_dump() todavía daría el mismo resultado. Resultó que también estaba almacenando en caché el archivo WSDL. Entonces su respuesta junto con [esta respuesta] (http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache) resolvió el problema. Gracias. –

17

Supongo que no es un error tipográfico y el método está realmente disponible.

probar este

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

Es podría ser debido a WSDL fue almacenado en caché.

+0

Me encuentro con el mismo problema y prueba su solución, no funciona. tener algo más en mente con respecto a esto? – Saani

+8

Esto resolvió mi problema al cambiar PHP 5.6 por PHP 7, tal vez algunos problemas de almacenamiento en caché al intercambiar directamente las versiones. – iquito

+0

¡Muchas gracias! Estaba intentando una respuesta aceptada pero la función llamada estaba en la lista y no tenía idea de lo que estaba pasando :) También estoy cambiando entre PHP 5.6 y 7.0 al igual que @iquito – ElChupacabra

Cuestiones relacionadas