这回我们来看看如何提供一个web service给别人吧server.php
程式码:
<?php
class HelloServise
{
//$__dispatch_map用来定义这个hello function输出以及输入的参数型态
var $__dispatch_map = array();
function HelloServise()
{
//我们在constructor这边指定好Hello这个函数Input的参数只有一个
//名称叫input型态是string
//传回值是一个string型态的值
$this->__dispatch_map['Hello'] =
array('in' => array('input' => ' string'),
'out' => array('output' => 'string'),
);
}
function Hello($input)
{
return "Hello:[$input]";
}
}
require_once 'SOAP/Server.php ';
require_once 'SOAP/Disco.php';
//产生一个SOAP Server物件
$server = new SOAP_Server;
//产生一个我们要提供的web service物件
$Hello = new HelloServise();
//向SOAP Server注册我们提供的Web Service名称叫HelloService
$server->addObjectMap($Hello,'urn:HelloService');
//因为我们取得Client送过来的xml是用POST方式
//所以我们检查如果送过来的资料是用POST送过来的
//就直接交给SOAP Server去做处理
if ($_SERVER['REQUEST_METHOD']=='POST')
$server->service($HTTP_RAW_POST_DATA);
else
{
//产生一个discover物件
//用来产生wsdl
$disco = new SOAP_DISCO_Server($server,'HelloServise');
//设定输出文件为xml格式
header("Content-type: text/xml");
//如果client呼叫的时候是xxx.php? wsdl
//就呼叫getWSDL()传回wsdl格式的XML
//否则就送回正确取得wsdl方式的XML
if($_SERVER['QUERY_STRING']=='wsdl') echo $disco->getWSDL();
else echo $disco->getDISCO();
}
?>
我们来测试一下刚刚写好的HelloService
client.php
程式码:
<?php
require_once("SOAP/Client.php");
$wsdl=new SOAP_WSDL('http://yourhost/server.php?wsdl');
$helloClient = $wsdl->getProxy();
echo $helloClient- >Hello("This is a test!");
?>
输出
程式码:
Hello:[This is a test!]
是不是很简单呢
此外这边在补充一点
WSDL跟SOAP的关系
wsdl是用来描述你提供了哪些web service
用个简单的说法就是
wsdl就是一个定义档
定义你提供的物件
SOAP才是真正处理输入以及输出xml的主角