天天看點

利用PHP SOAP實作WEB SERVICE

php有兩個擴充可以實作web service,一個是NuSoap,一個是php 官方的soap擴充,由于soap是官方的,是以我們這裡以soap來實作web service.由于預設是沒有打開soap擴充的,是以自己先看一下soap擴充有沒有打開。

 在soap編寫web service的過程中主要用到了SoapClient,SoapServer,SoapFault三個類。

SoapClient類

這個類用來使用Web services。SoapClient類可以作為給定Web services的用戶端。

它有兩種操作形式:

* WSDL 模式

* Non-WSDL 模式

在WSDL模式中,構造器可以使用WSDL檔案名作為參數,并從WSDL中提取服務所使用的資訊。

non-WSDL模式中使用參數來傳遞要使用的資訊。

SoapServer類

這個類可以用來提供Web services。與SoapClient類似,SoapServer也有兩種操作模式:WSDL模式和non-WSDL模式。這兩種模式的意義跟 SoapClient的兩種模式一樣。在WSDL模式中,服務實作了WSDL提供的接口;在non-WSDL模式中,參數被用來管理服務的行為。

在SoapServer類的衆多方法中,有三個方法比較重要。它們是SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。 

下面給出執行個體:

定義一個提供服務的php類,這個類所提供的函數就是web service對外提供的服務

利用PHP SOAP實作WEB SERVICE

 1 <?php

 2 Class PersonInfo

 3 {

 4     /**

 5      *    傳回姓名

 6      *    @return string 

 7      *

 8      */

 9     public function getName(){

10         return "My Name is Chance";

11     }

12 }

13 ?> 

利用PHP SOAP實作WEB SERVICE

下面給出伺服器端的代碼:

利用PHP SOAP實作WEB SERVICE

 2 //包含提供服務的類進來

 3 require_once('PersonInfo.php');

 4 

 5 //wsdl方式提供web service,如果生成了wsdl檔案則可直接傳遞到//SoapServer的構造函數中

 6 //$s = new SoapServer('PersonInfo.wsdl');

 7 

 8 //doesn't work 隻有location不能提供web service

 9 //output:looks like we got no XML document

10 //$s = new SoapServer(null,array("location"=>"http://localhost/Test/MyService/Server.php"));

11 

12 //下面兩種方式均可以工作,隻要指定了相應的uri

13 //$s = new SoapServer(null,array("uri"=>"Server.php"));

14 $s = new SoapServer(null,array("location"=>"http://localhost/Test/MyService/Server.php","uri"=>"Server.php"));

15 

16 $s -> setClass("PersonInfo");

17 

18 $s -> handle();

19 ?>

下面是用戶端代碼:

利用PHP SOAP實作WEB SERVICE

 2 try{

 3     //wsdl方式調用web service

 4     //wsdl方式中由于wsdl檔案寫定了,如果發生添加删除函數等操作改動,不會反應到wsdl,相對non-wsdl方式

 5     //來說不夠靈活

 6     //$soap = new SoapClient("http://localhost/Test/MyService/PersonInfo.wsdl");

 7     

 8     //non-wsdl方式調用web service    

 9     //在non-wsdl方式中option location系必須提供的,而服務端的location是選擇性的,可以不提供

10     $soap = new SoapClient(null,array('location'=>"http://localhost/Test/MyService/Server.php",'uri'=>'Server.php'));

11     

12     //兩種調用方式,直接調用方法,和用__soapCall簡接調用

13     $result1 = $soap->getName();

14     $result2 = $soap->__soapCall("getName",array());

15     echo $result1."<br/>";

16     echo $result2;

17     

18 }catch(SoapFault $e){

19     echo $e->getMessage();

20 }catch(Exception $e){

21     echo $e->getMessage();

22 }

23 

24 ?>

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/