2012-05-30 25 views
12

Được rồi, tôi nghĩ tôi cần một cặp mắt khác để xem xét điều này. Tôi đang thực hiện một cuộc gọi php soapclient đơn giản đến một dịch vụ web echo trên một máy chủ từ xa. Tôi khá chắc chắn rằng tôi không có bất kỳ lỗi chính tả nào và lệnh gọi hàm là chính xác. Tuy nhiên, tôi nhận được lỗi nghiêm trọng khi xác nhận hàm không phải là phương thức hợp lệ. Dưới đây là một var_dump của các loại dịch vụ web.Yêu cầu PHP SoapClient: không phải là phương pháp hợp lệ cho dịch vụ này

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

Đây là mã tôi đang sử dụng để thực hiện cuộc gọi:

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

Trả lời

42

Yêu cầu đơn giản cho các chức năng có sẵn các dịch vụ web của giải quyết vấn đề.

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

EchoTestRequest không phải là cuộc gọi chức năng hợp lệ. Các cuộc gọi chức năng thích hợp là EchoTest, được minh họa bằng cách đổ biến chức năng.

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

Điều này đã lưu ngày của tôi! nếu một hàm được liệt kê trong WSDL nhưng bạn không thể gọi nó, hãy kiểm tra câu trả lời này, vì nó sẽ tiết lộ tất cả các hàm có sẵn. – diynevala

+0

Sau khi nhận ra phương thức đó không có trong danh sách, tôi đã thêm "? V = 1" vào url wsdl và wsdl mới được tải bằng phương thức mới có sẵn. – wormhit

+1

Tôi đã gặp sự cố tương tự và đã thử câu trả lời của bạn, đã sửa tệp WSDL. var_dump() sẽ vẫn cho kết quả tương tự. Hóa ra nó cũng đang lưu vào bộ đệm tệp WSDL. Vì vậy, câu trả lời của bạn cùng với [câu trả lời này] (http://stackoverflow.com/questions/303488/in-php-how-can-you-clear-a-wsdl-cache) đã giải quyết được vấn đề. Cảm ơn. –

17

Tôi cho rằng bạn không phải lỗi đánh máy và phương pháp thực sự khả dụng.

Hãy thử điều này

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

Nó có thể là vì wsdl được lưu trữ.

+0

Tôi đang gặp phải vấn đề tương tự và cố gắng giải pháp của bạn, nó không hoạt động. có điều gì khác trong tâm trí liên quan đến điều này? – Saani

+8

Điều này giải quyết được vấn đề của tôi khi chuyển đổi PHP 5.6 với PHP 7 - có thể một số vấn đề về bộ nhớ đệm khi trao đổi trực tiếp các phiên bản. – iquito

+0

Cảm ơn bạn rất nhiều! Tôi đã cố gắng chấp nhận câu trả lời nhưng được gọi là chức năng đã được liệt kê và tôi không có ý tưởng những gì đang xảy ra :) Tôi cũng chuyển đổi giữa PHP 5,6 và 7,0 giống như @iquito – ElChupacabra

Các vấn đề liên quan