2012-05-30 5 views
12

これを調べるにはもう1組の目が必要です。私はリモートサーバー上のエコーWebサービスへのシンプルなPHPのsoapclient呼び出しを行っています。私は何のタイプミスもなく、関数呼び出しが正しいことを確信しています。しかし、関数が有効なメソッドではないと主張する致命的なエラーが表示されます。以下は、Webサービスタイプのvar_dumpです。ここでPHP SoapClientリクエスト:このサービスの有効なメソッドではありません。

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

私は電話をかけるために使用しているコードされています

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

答えて

42

Webサービスの利用可能な機能のための単純な要求は、問題を解決しました。

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

EchoTestRequestは有効な関数呼び出しではありませんでした。適切な関数呼び出しはEchoTestでした。関数の変数dumpによって示されています。

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

これは私の一日を保存しました!関数がWSDLにリストされていても呼び出すことができない場合は、利用可能なすべての関数が表示されるので、この答えを確認してください。 – diynevala

+0

そのメソッドがリストにないことを認識した後、wsdl urlに "?v = 1"を追加し、新しいwsdlに新しいメソッドをロードしました。 – wormhit

+1

私は同様の問題に遭遇し、あなたの答えを試して、WSDLファイルを修正しました。 var_dump()は同じ結果を返します。 WSDLファイルもキャッシュされていたことが判明しました。したがって、あなたの答えは[この回答](http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache)と一緒に問題を解決しました。ありがとう。 –

17

あなたは誤植ではなく、実際にその方法が利用可能であると仮定します。

は、それは、WSDLのキャッシュされたためであるかもしれないのです。この

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

試してみてください。

+0

同じ問題が発生して解決策を試しても動作しません。これに関して何か他のことを念頭に置いていますか – Saani

+8

これは、PHP 5.6をPHP 7に切り替えるときの私の問題を解決しました。おそらく、バージョンを直接交換するときにいくつかのキャッシングの問題があります。 – iquito

+0

ありがとうございました!私は受け入れられた答えを試みていたが、関数がリストされていたと私は何が起こっているのか分からなかった:)私はまた、@ 5.6と同様にPHP 5.6と7.0を切り替える – ElChupacabra

関連する問題