PHP 使用Nusoap类构建WebService(2)

NuSOAP中常用的调试方法有三种:
2.3.1 soapclient 类的 request 和 response 成员变量
最直接的调试方法就是检查访问 WEB 服务的过程中,客户端发出的 request 信息和服务端返回的 response 信息。 soapclient 类的 request 和 response 成员变量包含这些信息,在程序中显示出这两个变量的内容,可以帮助分析程序运行的情况。看下面的代码:

<?php   
require_once(“lib/nusoap.php”);   
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.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:’;   
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 成员变量提供了更为详细的调试信息,查看这个变量的内容,可以更好地帮助程序调试。
2.3.3 WEB 服务程序提供的调试方法
WEB 服务程序代码中,在创建 soap_server 类的实例前,定义变量 $debug=1 。调试信息作为备注,放在 SOAP 消息的尾部返回客户端,客户端通过查看 WEB 服务的 response 信息来查看调试信息。

<?php   
require_once(“lib/nusoap.php”);   
function concatenate($str1,$str2) {   
if (is_string($str1) && is_string($str2))   
return $str1 . $str2;   
else  
return 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 的用户来说,不需要关心内部的WSDL类是如何工作的,正确地使用 soap_server 类和 soapclient 类就可以实现对 WSDL 的支持。
2.4.1 创建支持 WSDL 的 WEB 服务
为了实现 WEB 服务程序对 WSDL 的支持,需要使用 soap_server 的 configureWSDL 方法,并且在调用 soap_server 的 register 方法注册 WEB 服务程序时,需要提供更详细的参数。看下面的代码,代码的文件名是 “/nusoap/nusoap_server3.php”。

<?php   
require_once(“lib/nusoap.php”);   
function concatenate($str1,$str2) {   
if (is_string($str1) && is_string($str2))   
return $str1 . $str2;   
else  
return new soap_fault(‘ 客户端 ‘,”,’concatenate 函数的参数应该是两个字符串 ‘);   
}   
$soap = new soap_server;   
$soap->configureWSDL(‘concatenate’); // 初始化对 WSDL 的支持   
// 注册服务   
$soap->register(‘concatenate’,   
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);   
?>  

现在打开浏览器,访问刚才建立的文件,http://127.0.0.1/nusoap/nusoap_server3.php,结果如下:
concatenate
View the WSDL for the service. Click on an operation name to view it’s details.
concatenate
点击函数名称concatenate,可以看到对函数的描述。点击”WSDL”,或者访问WEB服务文件,并在后面加上查询字符串”?wsdl”(http://127.0.0.1/nusoap/nusoap_server3.php?wsdl),可以得到WEB服务的WSDL内容。
2.4.2 通过 WSDL 调用 WEB 服务
通过 WSDL 调用 WEB 服务,与不通过 WSDL 调用 WEB 服务,程序的结构大体相同。区别在于,通过 WSDL 调用 WEB 服务,初始化 soapclient 类时,传入两个参数到 soapclient 的构造函数,第一个参数是 WSDL 文件的地址,第二个参数指定是否使用 WSDL ,指定为 true 即可。看下面的代码,代码的文件名是 “ /nusoap/nusoap_client3.php ”

<?php   
require_once(“lib/nusoap.php”);   
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true);   
$parameters=array(‘ 字符串 1′,’ 字符串 2′);   
$str=$client->call(‘concatenate’,$parameters);   
if (!$err=$client->getError()) {   
echo ” 程序返回 :”,$str;   
} else {   
echo ” 错误 :”,$err;   
}   
?>  

2.4.3 代理的使用
NuSOAP 提供代理的方法调用远程 WEB 服务。这种方法,在客户端程序里面创建一个远程服务的代理对象,通过代理直接调用远程的 WEB 服务,而不需要通过 soalclient 类的 call 方法。看下面的代码。

<?php   
require_once(“lib/nusoap.php”);   
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true);   
$proxy=$client -> getProxy(); // 创建代理对象 (soap_proxy 类 )   
$str=$proxy->concatenate(” 参数 1″,” 参数 2″); // 直接调用 WEB 服务   
if (!$err=$proxy->getError()) {   
echo ” 程序返回 :”,$str;   
} else {   
echo ” 错误 :”,$err;   
}   
?>   

 

 

 

 

 

 

转载于:https://www.cnblogs.com/loophome/archive/2012/10/09/2716750.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值