2011-12-02 10 views
7

Quando si tenta di accedere a una funzione in wsdl con alcuni dati (utilizzando soap client in php), viene visualizzato il seguente errore.Eccezione Uncaught SoapFault: [Client] Function non è un metodo valido per questo servizio

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

Qualsiasi aiuto?

+1

è che l'errore effettivo? Perché se così fosse, suppongo che tu abbia preso un file di modello dal fornitore di servizi e abbia provato a chiamare una funzione di servizio chiamata 'nome_funzione» - che è improbabile che sia il vero nome di una funzione. Dovresti sostituire 'function_name' con il nome della funzione che stai chiamando, è solo un segnaposto per mostrare dove andrebbe il nome della funzione. Il fornitore di servizi probabilmente fornisce documentazione. Ti suggerisco di leggerlo. Propriamente. – DaveRandom

+0

Ciao Dave grazie per la risposta.che non è un messaggio di errore originale.i ha sostituito il nome della funzione reale con 'nome_funzione' –

+0

Beh, anche così, l'errore ti dice che il nome della funzione non è valido per quel servizio che stai cercando di consumare -controlla i documenti e assicurati che il nome della funzione sia valido, e se lo è, contatta il fornitore del servizio. – DaveRandom

risposta

25

Se si desidera eseguire una funzione che SOAP non è in grado di trovare, è possibile che PHP abbia memorizzato nella cache il file wsdl.

Aggiungere questo:

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

per disattivare la memorizzazione nella cache.

+0

aiuta per me!Grazie – Talisin

+0

mi hai salvato la vita – tingfungc

+0

Ho aggiunto questa riga, ottenendo sempre lo stesso errore, cosa dovrei fare? – Saani

2

due possibili soluzioni:

  1. provare a vedere se la funzione esiste davvero con il frammento di codice si: PHP SoapClient request: not a valid method for this service
  2. Inoltre, una volta che avete visualizzato l'elenco delle chiamate di funzione disponibili, si prendono cura che se il tuo WSDL è generato da un server Java SOAP, potresti avere diverse funzioni chiamate "servizio" (o con lo stesso nome). Solo il primo verrà riconosciuto e utilizzato dal client SOAP PHP. È necessario rinominare manualmente tutti i tuoi nel WSDL!
0

Basta aggiungere Parametri, Tipo di reso e Metodo del servizio Web nei commenti nella parte superiore della funzione. Funzionerà. Ho provato a farlo funzionare.

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

Ho avuto questo problema e alla fine ho deciso di controllare il mio log degli errori php.

In php.ini consentono always_populate_raw_post_data = -1 e riavviare il server.

La mia versione di PHP è 5.6.8

Problemi correlati