2009-04-11 37 views
5

Tôi đang sử dụng NuSOAP để cố gắng tiêu thụ một Dịch vụ web được xây dựng bằng Java. Tôi có mã này cho đến thời điểm này:NuSOAP Dịch vụ Web PHP

<?php 
require_once('lib/nusoap.php'); 
$wsdl="http://localhost:8080/HelloWorldWS/sayHiService?WSDL"; 
$client=new nusoap_client($wsdl, 'wsdl'); 
$param='John';#array('name'=>'John'); 
echo $client->call('Hey', $param); 
unset($client); 
?> 

Tôi nhận được một trang trống không có gì thậm chí không có trong mã và tôi thực sự không biết tại sao. Tôi có làm điều gì sai?

Trả lời

8

mặc dù NuSOAP là một thư viện PHP SOAP rất phổ biến, nó chính là sử dụng trong các ứng dụng PHP4 mà tôi nghĩ. vì PHP5 có một phần mở rộng SOAP tích hợp nhanh hơn (vì nó là một phần mở rộng được biên dịch). Tôi cũng khuyên bạn nên sử dụng thư viện Zend Framework SOAP. nhưng tôi nhớ rằng tôi muốn sử dụng một số dịch vụ web (không được viết bởi tôi, được thực hiện bằng Java) và không có khách hàng SOAP nào hoạt động, nhưng NuSOAP. và tôi thực sự không thể hiểu tại sao.

dù sao, đây là điều mà tôi đã sử dụng dịch vụ web trở lại sau đó:

$soapClient = new nusoap_client($wsdlFile, 'wsdl', '', '', '', ''); 
$soapClient->soap_defencoding = 'UTF-8'; 
$soapClient->debug_flag = false; 
$soapError = $soapClient->getError(); 
if (! empty($soapError)) { 
    $errorMessage = 'Nusoap object creation failed: ' . $soapError; 
    throw new Exception($errorMessage); 
} 
// calling verifyT method, using 2 parameters. 
$tResult = $soapClient->call('verifyT', array($param1, $param2)); 
$soapError = $soapClient->getError(); 
if (! empty($soapError)) { 
    $errorMessage = 'SOAP method invocation (verifyT) failed: ' . $soapError; 
    throw new Exception($errorMessage); 
} 
if ($soapClient->fault) { 
    $fault = "{$soapClient->faultcode}: {$soapClient->faultdetail} "; 
    // handle fault situation 
} 
+0

Điểm quan trọng cần lưu ý là bạn nên tắt debug_flag trong quá trình sản xuất. Tôi đã học được nó trong một con đường. – palaniraja

1

Có, bạn đang làm gì đó sai. Thật khó để biết những gì dựa trên một trang trống, nhưng tôi sẽ bắt đầu với dòng này, không giống như PHP hợp lệ:

$ param = 'John'; # array ('name' => 'John ');

"#" không bắt đầu nhận xét bằng PHP; "//" hiện

Nếu việc sửa chữa vẫn dẫn đến một trang trống, hãy bật báo cáo lỗi và/hoặc thêm nhiều đầu ra hơn để xem chính xác những gì đang diễn ra.

+1

'#' cũng bắt đầu nhận xét dòng trong PHP. Nó chỉ không được sử dụng rất thường xuyên. –

4

Không sử dụng NuSoap. PHP đã có một native soap client kể từ phiên bản 5, ổn định hơn nhiều, bên cạnh việc nhanh hơn.

.. khi trang web được nạp tôi nhận được một trang không có gì trống không ..

Đó có thể là một lỗi nghiêm trọng. Hãy thử kiểm tra nhật ký lỗi để xem điều gì đã xảy ra. Hoặc đặt display_errors = on

+3

Tôi không đồng ý. Các SoapClient PHP sẵn có có vấn đề và lỗi chưa được giải quyết. Như thế này >> http://bugs.php.net/bug.php?id=48216&thanks=3 ngăn nó hoạt động. –

4

Không sử dụng NuSoap. PHP đã có một Native Client xà phòng kể từ phiên bản 5

Có một số lý do chính đáng để tiếp tục sử dụng NuSOAP trên PHP5:

  • NuSOAP tạo ra một danh sách các phương pháp khi bạn GET trang
  • NuSOAP tạo WSDL "trên bay" một tính năng thực sự hữu ích không phải là được cung cấp bởi việc triển khai gốc SOAP trong PHP 5
0

Vui lòng xác minh HTML được tạo bởi máy chủ trong trình duyệt của bạn. Trong trường hợp của tôi, kết quả chứa các thẻ XML, do đó trình duyệt không thể hiển thị thông tin một cách chính xác.

0

Tôi vừa đối mặt với cùng một vấn đề.

Sử dụng include_once thay vì require_once giải quyết được vấn đề về trang trống.Đây không phải là giải pháp hoàn hảo của khóa học, vì điều này: vì điều này: Difference between require, include and require_once?

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