PHP调用Webservice实例代码(3)


<?php
require_once(“lib/nusoap.php”);
$client = new soapclient(‘');
$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);
?>


现在打开浏览器,访问刚才建立的文件,,结果如下:
concatenate
View the WSDL for the service. Click on an operation name to view it's details.
concatenate
点击函数名称concatenate,可以看到对函数的描述。点击”WSDL”,或者访问WEB服务文件,并在后面加上查询字符串”?wsdl”(?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(‘?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 方法。看下面的代码。

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/fd7b3c8c102bfbbc652226fb5a72385a.html