




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、NuSoap介绍(php 调用 webservice)2009-07-07 14:41NuSOAP是 PHP环境下的WEB服务编程工具,用于创建或调用 WEB服务。它是 一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他 支持SOAP1.1和WSDL1.1的系统互操作。NuSOAP完全由PHP语言编写,由一 系列PHP类组成,不需要扩展库的支持,这种特性使得 NuSOAP可以用于所有 的 PHP 环境,不受服务器安全设置的影响。1. NuSOAP 的获取和安装NuSOAP项目建立在SourceForge 上,网络地址是: 或,这里,可以下载到 NuS
2、OAP的最新的版本。NuSOAP的安装比较简单,把下载的 NuSOAP的文件拷贝到服务器上,可以放在 独立的目录里,也可以与程序代码放在相同的目录里,只要你的 PHP 代码能够 访问到这些文件就可以了。本文的测试环境基于PHP4.3.2和NuSOAP 0.7.2版本,NuSOAP安装在WEB 目录“ /nusoap ”里,有两个子目录, lib 和samples。其中,lib 目录下 存放NuSOAP的所有源代码文件,samples目录下是NuSOA开发小组提供一些 的例子。测试文件存放在 WEB 目录“ /nusoap ”里。2. NuSOAP 的使用NuSOAP由一 PHP的类组成,其中最
3、常用到的是类 soap_server和类 soalclient 。类 soap_server 用于创建 WEB 服务,类 soapclient 在访问 WEB 服务时会用到。2.1 一个简单的例子: Hello World这个例子将利用NuSOAP创建一个简单的WEB服务,并利用NuSOAP创建一个 客户端程序,调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串“ Hello World ”。首先,创建 WEB 服务程序代码文件“ /nusoap/nusoap_server1.php ”:/把NuSOAP的源文件包含到当前的代码文件里<?phprequire_once("
4、;lib/nusoap.php");/ 定义服务程序function hello() return 'Hello World!'/ 初始化服务对象 , 这个对象是类 soap_server 的一个实例$soap = new soap_server;/ 调用服务对象的 register 方法注册需要被客户端访问的程序。/ 只有注册过的程序,才能被远程客户端访问到。$soap->register('hello');/ 最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。/service 方法处理输入的数据,调用相
5、应的函数或方法,并且生成正确的反馈, 传回给客户端。$soap->service($HTTP_RAW_POST_DATA);?>至此, WEB 服务程序代码文件已经建好,接下来,创建一个客户端程序代码文件“ /nusoap/nusoap_client1.php ”,调用 WEB 服务:/把NuSOAP的源文件包含到当前的代码文件里<?phprequire_once("lib/nusoap.php");/ 初始化客户端对象,这个对象是类 soapclient 的一个实例,/ 把服务程序的 URL 地址传递给 soapclient 类的构造函数。$client
6、 = new soapclient('/nusoap/nusoap_server1.php');/ 利用客户端对象的 call 方法调用 WEB 服务的程序 $str=$client->call('hello');/ 客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。/ 如果没有错误, getError() 方法返回 false ;如果有错误, getError() 方法返回错误信息。if (!$err=$client->getError() echo " 程序返回 :",ht
7、mlentities($str,ENT_QUOTES); else echo " 错误 :",htmlentities($err,ENT_QUOTES);?>至此,客户端程序也建立好了,打开浏览器,访问客户端程序,看一下结果。这 个例子,浏览器会显示字符串:“程序返回 :Hello World! ”2.2 传递参数和返回错误信息的方法再通过例子说明传递参数和返回错误信息的方法。 这个例子实现两个字符串的连 接,参数是两个字符串,返回值是由两个参数连接而成的字符串。首先,创建服 务程序代码文件“ /nusoap/nusoap_server2.php ”,完整的代码如下:
8、<?phprequire_once("lib/nusoap.php"); function concatenate($str1,$str2) if (is_string($str1) && is_string($str2) return $str1 . $str2;elsereturn new soap_fault(' 客户端 ','','concatenate 函数的参数应 该是两个字符串 ');$soap = new soap_server; $soap->register('conca
9、tenate'); $soap->service($HTTP_RAW_POST_DATA);?>与 2.1 节 WEB 服务程序的代码比较, 这里的代码结构大体是相同的。 注意以下 两点:* 服务程序的定义不同, 带有两个参数。 NuSOAP 注册服务程序的过程还是 一样的,都是调用服务对象的 register 方法。* 这里使用了 NuSOAP的一个新类soap_fault 。当传入的两个参数有一个 不是字符串时, 程序通过这个类把错误信息返回给客户端。 这个类的构造函数有 4 个参数:faultcode必填参数 , 建议值为“ Client ”或“ Server ”,指
10、明错误是客户端的错误 还是服务端的错误。faultactor预留项,现在还没有使用faultstring错误的描述信息faultdetail可选项, XML 格式的数据 , 说明详细的错误信息 客户端程序代码文件“ /nusoap/nusoap_client2.php ”的完整内容如下<?php require_once("lib/nusoap.php");$client = newsoapclient('/nusoap/nusoap_server2.php'); $parameters=array(' 字符串 1
11、',' 字符串 2');$str=$client->call('concatenate',$parameters);if (!$err=$client->getError() echo " 程序返回 :",$str; else echo " 错误 :",$err;?>NuSOAP勺客户端调用带参数的 WEB服务时,使用数组传递参数。$parameters 是一个数组,其中依次是每个参数的值。客户端在调用远程的服务程序时,使用 带有两个参数的 call 方法,第一个参数是服务程序的名称,第二个参数是
12、服务 程序的参数数组,这里是 $parameters 。通过浏览器访问上面的客户端程序, 浏览器上会显示字符串:“ 程序返回 : 字符串 1 字符串 2 ”接下来,试着给 WEB 服务程序传入错误参数,修改上面的客户端程序,把生成 参数数组的语句改成: $parameters=array( “ 字符串”,12) ,再通过浏览器 访问客户端程序,浏览器上会显示字符串:“错误 : 客户端 : concatenate 函 数的参数应该是两个字符串”。 WEB 服务程序判断传入的参数有一个不是字符 串,通过 soap_fault 给客户端返回错误信息。2.3 调试的方法NuSOA中常用的调试方法有三种
13、:2.3.1 soapclient 类的 request 和 response 成员变量最直接的调试方法就是检查访问WEB 服务的过程中,客户端发出的 request 信息和服务端返回的 response 信息。 soapclient 类的 request 和 response 成员变量包含这些信息,在程序中显示出这两个变量的内容,可以帮助分析程序 运行的情况。看下面的代码 :<?phprequire_once("lib/nusoap.php");$client = new soapclient('http://nusoap/nusoap_s
14、erver2.php');$parameters=array(' 字符串 1',' 字符串 2');$str=$client->call('concatenate',$parameters);if (!$err=$client->getError() echo " 程序返回 :",$str; else echo " 错误 :",$err;/ 下面显示 request 和 response 变量的内容echo '<p/>'echo 'Request:
15、39;echo '<pre>',htmlspecialchars($client->request,ENT_QUOTES),'</pre>'echo 'Response:'echo '<pre>',htmlspecialchars($client->response,ENT_QUOTES ),'</pre>' ?>2.3.2 soapclient 类的 debug_str 成员变量soapclient 类的 debug_str 成员变量提供了更为详细
16、的调试信息, 查看这个变 量的内容,可以更好地帮助程序调试。2.3.3 WEB 服务程序提供的调试方法WEB服务程序代码中,在创建soap_server类的实例前,定义变量$debug=1 。 调试信息作为备注, 放在 SOAP 消息的尾部返回客户端, 客户端通过查看 WEB 服 务的 response 信息来查看调试信息。<?phprequire_once("lib/nusoap.php");function concatenate($str1,$str2) if (is_string($str1) && is_string($str2)return
17、 $str1 . $str2;elsereturn new soap_fault('客户端 ','','concatenate 函数的参数应该是两个字符串 ');$debug=1; / 定义调试$soap = new soap_server;$soap->register('concatenate');$soap->service($HTTP_RAW_POST_DATA);?> 2.4对WSDL的支持NuSOAP内部通过类"WSDL"实现对 WSDL的支持。对于NuSOAP的用户来说, 不需要
18、关心内部的WSD类是如何工作的,正确地使用 soap_server类和 soapclient 类就可以实现对WSDL的支持。2.4.1 创建支持WSDL的WEB服务为了实现 WEB服务程序对 WSDL的支持,需要使用soap_server的 configureWSDL 方法,并且在调用 soap_server 的 register 方法注册 WEB 服 务程序时,需要提供更详细的参数。看下面的代码,代码的文件名是 “/nusoap/nusoap_server3.php ”。<?phprequire_once("lib/nusoap.php");function con
19、catenate($str1,$str2) if (is_string($str1) && is_string($str2)return $str1 . $str2;elsereturn new soap_fault('客户端 ','','concatenate 函数的参数应该是两个字符串 ');$soap = new soap_server;$soap->configureWSDL('concatenate'); /初始化对 WSDL的支持/ 注册服务$soap->register('conc
20、atenate',array("str1"=>"xsd:string","str2"=>"xsd:string"), /输入参数的定义array("return"=>"xsd:string") /返回参数的定义);$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''$soap->service($HTTP_RAW_POST_DATA
21、);?>现在打开浏览器,访问刚才建立的文件, /nusoap/nusoap_server3.php ,结果如下:concatenateView the WSDLfor the service. Click on an operation nameto view it's details.* concatenate点击函数名称con cate nate ,可以看到对函数的描述。点击"WSDL"或者访问 WEB 服务文件,并在后面加上查询字符串"?wsdl"(/nusoap/
22、nusoap_server3.php?wsdl),可以得到 WEB服务的WSDL内容。242 通过 WSDL调用 WEB服务通过WSDL调用WEB服务,与不通过 WSDL调用WEB服务,程序的结构大体相 同。区别在于,通过 WSDL调用WEB服务,初始化soapclient 类时,传入两 个参数到soapclient 的构造函数,第一个参数是 WSDL文件的地址,第二个参 数指定是否使用 WSDL,指定为true即可。看下面的代码,代码的文件名是“ /nu soap/nu soap_clie nt3.php”<?phprequire_once("lib/nusoap.php");$client = new soapclient('/nusoa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 能源企业事故应急措施及方案
- 矿山机械调试计划
- 2025年人教版五年级音乐上册教学计划
- 2025部编版小学二年级心理健康教育计划
- 智能微电网与智能能源管理结合-全面剖析
- 2025年并联无功补偿装置项目发展计划
- 五年级道德与法治课堂互动计划
- 农业品牌形象设计研究-全面剖析
- 地铁建设项目土壤检测计划
- 小学三年级体育课程创新计划
- 人力资源社会保障部所属单位招聘真题2024
- 保定雄安新区容城县招聘事业单位真题2024
- 2025年广西壮族自治区南宁市青秀区中考一模英语试题(含答案)
- 2025-2030中国手术包行业市场发展分析及投资前景预测研究报告
- GB/T 10810.2-2025眼镜镜片第2部分:渐变焦
- 2024年上海市《辅警招聘考试必刷500题》考试题库(典优)
- 2025年暖通空调考试试题及答案
- AI技术在舞蹈实训空间设计中的创新应用
- 钢筋机械连接技术规程 JGJ 107-2016
- 中医培训课件:《中药热奄包技术》
- 【工商管理专业毕业综合训练报告2600字(论文)】
评论
0/150
提交评论