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