對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2010/10/18 13:04:21
上回提到了如何使用php去呼叫別人提供的web service
這回我們來看看如何提供一個web service給別人吧
server.php
我們來測試一下剛剛寫好的HelloService
client.php
輸出
是不是很簡單呢
此外這邊在補充一點
WSDL跟SOAP的關係
wsdl是用來描述你提供了哪些web service
用個簡單的說法就是
wsdl就是一個定義檔
定義你提供的物件
SOAP才是真正處理輸入以及輸出xml的主角
原文出處:酷!學園 - [心得]使用php提供Web service
這回我們來看看如何提供一個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的主角
原文出處:酷!學園 - [心得]使用php提供Web service