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;   
}   
?>   

 

 

 

 

 

 

posted @ 2012-10-09 14:37  斌斌331313869  阅读(215)  评论(0编辑  收藏  举报