关于web service的认识
可以用于数据交互,数据共享,可以为别人提供访问数据库的接口;
1:web service 是一种分布式服务器;基于XML+http,具有通用性,无关平台,无关编程语言的限制
2:web service 包括三个:UDDI WSDL SOAP;
3:UDDI 是目录,用来注册web service;WSDL,是服务语言,跟XML格式差不多,可以用
zend studio集成工具自动生成;也可以用PHP 的SoapDiscover.class.php这个类库生成;当然
也可以手写;SOAP,是一种协议;
4:soap包括两种形式:无WSDL和有WSDL;分开介绍
php需要配置php.ini配置文件,将php_soap.dll前面的分号去掉;
无WSDL形式:
分为服务端和客户端;
这里用到的是php5支持的soap扩展类;SoapServer,SoapClient
以一个例子来说明:
服务端server.php
<?php
//实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,
那么第一个参数就是这个wsdl文件的地址。
$server = new SoapServer(null, array('uri' =>'soap_server'));
$server->addFunction('sayhello');
$server->handle();
function sayhello($name){
if(isset($name))
{
return "hello".$name;
}
}
?>
客户端client.php
<?php
header("Content-type:text/html; charset=UTF-8");
try{
$soap = new SoapClient(null,array('location'=>"http://127.0.0.1/server.php",'uri'=>"soap_server"));
$name ="AS234";
$hello = $soap->sayHello($name);
var_dump($hello);
}catch(SoapFault $fault){
echo"cuowi";
}
?>
用浏览器访问客户端文件:得到结果:helloAS234;
有WSDL模式
这里需要一个后缀为WSDL格式的文件,用来存储信息;这个可以自动生成;
方法如下:
(1)create_wsdl.php
//访问这个文件,生成service.wsdl文件;
<?php
require('service.php');
require('SoapDiscover.class.php'); //引用生成wsdl的类
$wsdl = new SoapDiscovery("service", "soap"); //第一个参数为类名,也是生成的wsdl的文件名;
第二个参数名任意
$wsdl->getWSDL();//调用生成方法
?>
(2)service.php
<?php
class service {
public function HelloWorld() {
return "Hello";
}
public function Add($a, $b) {
return $a + $b;
}
}
?>
生成wsdl之前用上面这个;生成了wsdl后再在这个文件里面加入
$server = new SoapServer('service.wsdl', array('soap_version' => SOAP_1_2));
$server->setClass("service"); //注册Service类的所有方法
$server->handle(); //处理请求
(3)client.php
用来访问wsdl文件的客户端
<?php
ini_set('soap.wsdl_cache_enabled', "0"); //关闭wsdl缓存
$soap = new SoapClient('http://localhost/soapexample/service.php?wsdl');
echo $soap->Add(28, 2);
//echo $soap->__soapCall('Add',array(28,2))//或这样调用
?>