標籤:log 發送請求 close tty soa 遠程 求和 hello 作業系統
1) WebService技術介紹
WebService是一種跨程式設計語言和跨作業系統平台的遠程調用技術。僅僅有通過Web Service,client和server才可以自由的用HTTP進行通訊。不論兩個程式的平台和變成語言是什麼。
XML、SOAP和WSDL是Web Service平台的三大技術:
WebService採用HTTP協議資料轉送。採用XML格式封裝資料,即XML中說明調用遠程服務物件的哪個方法、傳遞的參數是什麼、以及服務物件的返回結果是什麼。
XML是WebService平台中表示資料的格式。除了易於建立和易於分析外,XML基本的有點在於它既是平台無關的,又是廠商無關的。
SOAP,WebService通過HTTP協議發送請求和接收結果時。發送的請求內容和結果內容都採用XML格式封裝,並添加了一些特定的HTTP訊息頭。以說明HTTP訊息的內容格式。這些特定的HTTP訊息頭和XML內容格式就是SOAP協議。SOAP提供了標準的RPC方法來調用Web Service。
SOAP協議 = HTTP協議 + XML資料格式。
WSDL(Web Service Description Language)是基於XML的語言。用於描寫敘述Web Service及其函數、參數和傳回值,它是WebServiceclient和server端都能理解的標準格式。
由於是基於XML的,所以WSDL及時機器可閱讀的。又是人可閱讀的。WSDL檔案儲存在Webserver上,通過一個url地址就能夠訪問到它。client要調用一個WebService服務之前,要知道該服務的WSDL檔案的地址。
WebService服務提供者能夠通過兩種方式來暴露它的WSDL檔案地址:1、注冊到UUIDserver,以便被人尋找;2、直接告訴給client調用者。
2) Apache相關配置
為了可以實現Web Service。httpd必須支援soap的擴充,這裡以yum安裝httpd及soap擴充為例進行說明:
1> 安裝httpd
yum install httpd
2> 安裝php
yum install php
3> 配置httpd支援php解析
在/etc/httpd/conf/httpd.conf中加入例如以下:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
4> 又一次啟動httpd
service httpd restart
5> 檢查是否安裝了soap擴充
/usr/bin/php -m | grep soap //! 假設存在則說明已經安裝了soap擴充,假設不存在,運行下一步
6> 安裝soap擴充
yum install php-soap //! 安裝完之後再次檢查。重新啟動httpd
7> 驗證soap擴充是否正確安裝
既能夠通過php -m | grep soap的方式,也能夠通過phpinfo();的方式。
3) PHP實現WebService服務端
1> 定義服務類——Service.php
該服務端就是實現你想要對外提供的介面,如果我們須要對外提供一個函數,它接收一個字串。然後返回”Hello ” + 輸入的字串這個小功能,服務類非常easy,例如以下所看到的:
<?php class Service {public function sayHello($content){ return "Hello ".$content;} }?>
2> 產生wsdl檔案——create_wsdl.php
為了產生wsdl檔案,我們能夠使用網上提供的SoapDiscovery.class.php中的getWSDL提供的方法來實現。該SoapDiscovery.class.php的代碼在網上能夠下載到,為了組建檔案,我們須要改動getWSDL方法中的部分代碼(加上寫檔案的代碼),例如以下所看到的:
//return sprintf(‘%s%s%s%s%s%s‘, $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ‘</definitions>‘);//!凝視掉return,加入例如以下代碼。目的是為了調用getWSDL產生.wsdl檔案$fso = fopen($this->class_name.".wsdl", "w");fwrite($fso, sprintf(‘%s%s%s%s%s%s‘, $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ‘</definitions>‘)); fclose($fso);
如今我們就能夠定義自己的create_wsdl.php了,僅僅須要調用一下這種方法就可以。例如以下:
<?php include("Service.php");include("SoapDiscovery.class.php");//! 第一個參數是類名。產生的wsdl檔案就是以它來命名的。第二個參數是服務的名稱,能夠隨便寫$disco = new SoapDiscovery(‘Service‘, ‘soap‘);$disco->getWSDL();?>
3> 改動服務端——Service.php
改動Service.php。加入一些代碼,例如以下所看到的:
<?php class Service {public function sayHello($content){ return "Hello ".$content;} } $service = new SoapServer(‘http://192.168.17.129/soap/Service.wsdl‘, array(‘soap_version‘ => SOAP_1_2)); $service->setClass("Service"); //! 注冊Service類的全部方法 $service->handle(); //! 處理請求?>
4> 改動Service.wsdl檔案
5> 用戶端測試——client.php
client.php用來測試我們剛寫的Web Server的服務端是否能可用,代碼例如以下:
<?php $soap = new SoapClient(‘http://192.168.17.129/soap/Service.php?
wsdl‘); echo $soap->sayHello("houqd2012");?>
輸出結果例如以下:
Hello houqd2012
PHP寫webservice服務端