Nusoap 学习笔记

1.Hello World 的实现

hello world是应用最广泛的入门程序之一,先建服务端,代码如下:

 

Php代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. function HelloWorld()  
  5. {  
  6.     return 'Hello,world';  
  7. }  
  8.   
  9. $server = new soap_server;  
  10. $server->register('HelloWorld');  
  11. $server->service($HTTP_RAW_POST_DATA);  
  12.   
  13. ?>  
 

 

HelloWorld()函数是一个服务程序,实际上就是返回一个"Hello,World!"的字符串;

$server 是一个服务对象,它是soap_server的一个实例;

register方法是注册被客户端访问的程序,参数是函数名称不带括号,函数的参数是作为register方法身的参数调用,下面有演示;

service是处理输入的数据,调用相对应的程序,返回给客户端。

 

综上,一个服务端的程序好了,下来就是客户端,代码如下:

 

Java代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. $client = new soapclient('http://localhost/nusoap/server.php');  
  5.   
  6. $string = $client->call('HelloWorld');  
  7. if(!$err = $client->getError()){  
  8.     echo "The program return:".htmlentities($string,ENT_QUOTES);  
  9. }  
  10. else  
  11.     echo "ERR:".htmlentities($err,ENT_QUOTES);  
  12.   
  13. ?>  

 

 

$client 是一个soapclient的实例,地址用的是url不是相对地址;

call是调用web服务的程序,调用方式跟服务端的register方法基本一样;

getError检查掉用过程是否出错,没有错,返回的false,出错,返回出错信息。

 

在浏览器访问http://localhost/nusoap/client.php

得到输出的结果:Hello,World!

 

2.带参数和返回错误信息

服务端的程序代码如下:

 

Php代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. function strings($string1,$string2)  
  5. {  
  6.     if(is_string($string1)&&is_string($string2))  
  7.         return "two strings:".$string1." and ".$string2;  
  8.           
  9.     else  
  10.         return new soap_fault('Client','','two string required!');  
  11. }  
  12.   
  13. $server = new soap_server;  
  14. $server->register('strings');  
  15. $server->service($HTTP_RAW_POST_DATA);  
  16.   
  17. ?> 


code ,必填参数 , 建议值为“ Client ”或“ Server ”,指明错误是客户端的错误还是服务端的错误。 

faultactor ,预留项,现在还没有使用 

faultstring ,错误的描述信息 

faultdetail ,可选项, XML 格式的数据 , 说明详细的错误信息 

客户端代码如下:

Php代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. $client = new soapclient('http://localhost/nusoap/server1.php?',);  
  5. $parameters = array('Hello','world');  
  6.   
  7. $string = $client->call('strings',$parameters);  
  8.   
  9. if(!$err = $client->getError())  
  10. {  
  11.         echo "The server return:".$string;  
  12. }  
  13. else  
  14.     echo "ERROR:".$err;  
  15.   
  16. ?>  

 

 

注意的是call的参数调用

3.创建支持wsdl的服务

服务端代码如下:

Java代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. function strings($string1,$string2)  
  5. {  
  6.     if(is_string($string1)&&is_string($string2))  
  7.         return "two strings:".$string1." and ".$string2;  
  8.           
  9.     else  
  10.         return new soap_fault('Client','','two string required!');  
  11. }  
  12.   
  13. $server = new soap_server;  
  14. $server->configureWSDL('strings');  
  15. $server->register('strings',array("string1"=>"xsd:string",  
  16. "string2"=>"xsd:string"),array("return"=>"xsd:string"));  
  17.   
  18. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA:'';  
  19.   
  20. $server->service($HTTP_RAW_POST_DATA);  
  21.   
  22. ?>  
 

 

注意的是register的参数

通过http://localhost/nusoap/server1.php?wsdl  查看wsdl的内容如下图

 

wsdl

 

客户端代码如下:

 

Php代码   收藏代码
  1. <?  
  2. require_once("lib/nusoap.php");  
  3.   
  4. $client = new soapclient('http://localhost/nusoap/server1.php?wsdl',true);  
  5. $parameters = array('Hello','world');  
  6.   
  7. $string = $client->call('strings',$parameters);  
  8.   
  9. if(!$err = $client->getError())  
  10. {  
  11.         echo "The server return:".$string;  
  12. }  
  13. else  
  14.     echo "ERROR:".$err;  
  15.       
  16. echo '<p/>';  
  17. echo 'Request:';  
  18. echo '<pre>',htmlspecialchars($client->request,ENT_QUOTES),'</pre>';  
  19. echo 'Response:';  
  20. echo '<pre>',htmlspecialchars($client->response,ENT_QUOTES ),'</pre>';  
  21.   
  22.       
  23.   
  24. ?>  

 

为了方便调试我加入了request和response来显示运行信息。在服务端加入$debug=1再在客户端加上

echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';即显示调试内容。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值