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