2012-05-30 60 views
12

好吧,我想我需要另一雙眼睛來看看這個。我正在對遠程服務器上的echo 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

在意識到該方法不在列表中後,我將「?v = 1」添加到wsdl url,並且新的wsdl使用了新的方法加載。 – wormhit

+1

我遇到了類似的問題,並嘗試了你的答案,修復了WSDL文件。 var_dump()仍然會給出相同的結果。原來它也在緩存WSDL文件。所以你的答案與[這個答案](http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache)解決了這個問題。謝謝。 –

17

我假設你沒有錯字,而且方法實際上是可用的。

試試這個

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

這可能是因爲WSDL的被緩存。

+0

我遇到同樣的問題並嘗試您的解決方案,它不起作用。對此有什麼想法? – Saani

+8

這解決了我在使用PHP 7切換PHP 5.6時遇到的問題 - 在直接交換版本時可能會出現一些緩存問題。 – iquito

+0

非常感謝!我正在嘗試接受答案,但稱爲函數已列出,我不知道發生了什麼事情:)我也是在PHP 5.6和7.0之間切換,就像@iquito – ElChupacabra