2012-05-30 14 views
12

Ok, penso di aver bisogno di un altro paio di occhi per esaminare questo. Sto facendo una semplice chiamata php soapclient a un servizio web echo su un server remoto. Sono abbastanza sicuro di non avere errori di battitura e che la chiamata alla funzione è corretta. Tuttavia, sto ricevendo un errore fatale sostenendo che la funzione non è un metodo valido. Di seguito è riportato un var_dump dei tipi di servizi Web.Richiesta PHP SoapClient: non un metodo valido per questo servizio

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

Ecco il codice che sto usando per effettuare la chiamata:

<?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>"; 
?> 

risposta

42

una semplice richiesta per le funzioni disponibili del servizio web ha risolto il problema.

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

EchoTestRequest non era una chiamata di funzione valida. La funzione corretta chiamata era EchoTest, che è illustrato dal dump delle funzioni.

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

Questo mi ha salvato la giornata! se una funzione è elencata in WSDL ma non puoi chiamarla, controlla questa risposta, in quanto rivelerà tutte le funzioni disponibili. – diynevala

+0

Dopo aver capito che il metodo non era in elenco ho aggiunto "? V = 1" a wsdl url e nuovo wsdl è stato caricato con il nuovo metodo disponibile. – wormhit

+1

Mi sono imbattuto in un problema simile e ho provato la risposta, corretto il file WSDL. var_dump() darebbe comunque lo stesso risultato. Si è scoperto che stava anche memorizzando nella cache il file WSDL. Quindi la tua risposta insieme a [questa risposta] (http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache) ha risolto il problema. Grazie. –

17

Suppongo che tu non stia scrivendo e il metodo sia effettivamente disponibile.

Prova questa

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

E 'potrebbe essere a causa di WSDL è stato memorizzato nella cache.

+0

Sto incontrando lo stesso problema e provo la tua soluzione, non funziona. hai altro in mente riguardo a questo? – Saani

+8

Questo ha risolto il mio problema quando ho cambiato PHP 5.6 con PHP 7 - forse alcuni problemi di cache durante lo scambio diretto delle versioni. – iquito

+0

Grazie mille! Stavo cercando una risposta accettata, ma la funzione chiamata era elencata e non avevo idea di cosa stesse succedendo :) Sto anche passando da PHP 5.6 a 7.0 come @iquito – ElChupacabra

Problemi correlati