-
-
class FruitQuoteService
- {
- public $__dispatch_map = array();
- public $__type = array();
- public $__type defy(
- public function FruitQuoteService()
- {
- $this->__dispatch_map['getQuote'] = array(
- "in" => array("category" => "string") ,
- "out" => array("quote" => "int")
- );
- $this->__dispatch_map['getFruit'] = array(
- "in" => array(),
- "out" => array("fruitSummary" => "{urn:FruitQuoteService}fruitStruct")
- );
-
- $this->__typedef ['fruitStruct'] = array(
- $this->__typedef ['fruitStruct'] = array(
- '類別'=>'字串', '金額' => 'int'
- );
- }
-
- public function getQuote($category)
- {
- switch ($category)
- {
- case 'apple': 中斷;
- case '橘色':
- $quote = 12;
- 中斷;
- case '香蕉':
- $quote = 20;
- 中斷;
- 預設:
- $quote = 0;
- break;
- }
- return $quote;
- }//函數結束
-
- public function getFruit()
- {
- $list = array(
- array("蘋果", 100),
- array("柳橙", 500),
- array("香蕉", 260)
- );
- return $list;
- }//結束函數
- }//結束類別
- ?>
複製程式碼
第二步:建立伺服器.php 這個程式將會接收並處理客戶端的請求
-
-
require_once("FruitQuoteService.php");
- require_once("SOAP/Server.php");
- $fruitQuote = new FruitQuoteService();
- $server = new Soap_Server();
- $server->addObjectMap($fruitQuote, "http://www.xxx.com");
- if (isset ($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST')
- {
- $server->service($GLOBALS['HTTP_RAW_POST_DATA']);
- } else
- {
- require_once 'SOAP/Disco.php';
- $disco = new SOAP_DISCO_Server($server,'FruitQuoteService');
- header("內容類型:text/xml" );
- if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
- echo $disco->getWSDL();
- } else {
- echo $disco->getDISCO();
- }
- }
- 退出;
- ?>
-
複製代碼
現在可以透過http://www.shangyong.com/ws/server.php?wsdl查看wsdl文件。
DISCO:一項微軟用於發布和發現 Web 服務的技術,定義了一個從給定的 url 獲取 Web 服務描述的簡單的 HTTP GET 機制
第三步:建立web服務客戶端程式碼
-
- require_once('SOAP/Client.php');
- //該名稱空間必須和server.php定義的一致
- $options = array('namespace' => 'http://www.xxx.com',
- 'trace' => 1); //為1可以表示透過__get_wire取得soap訊息,預設為0
- $client = new SOAP_client("http://www.shangyong.com/ws/server.php");
- $params = array();
- $response = $client->call("getFruit", $params, $options);
- //print_r($client->__get_wire()); // 輸出soap訊息
- if (PEAR::isError($response)) {
- echo 'Error: ' . $response->getMessage() 。 "
n";
- } else {
- print_r($response) 。 "n";
- }
- $params = array("name" => "orange");
- $response = $client->call("getQuote", $params, $options) ;
- if (PEAR::isError($response)) {
- echo '錯誤:' 。 $response->getMessage() 。 。 "nn";
- }
- 退出;
- ?>
-
-
- 複製程式碼
客戶端程式碼2
-
-
- require_once('SOAP/Client.php');
- /**
- * 所有的服務內容,如:命名空間、UEL, 參數名稱等都可以從wsdl檔案取得
- */
- $ wsdl = new SOAP_WSDL("http://www.shangyong.com/ws/server.php?wsdl");
- /**
- * 從wsdl產生一個proxy對象,這個對象包含wsdl文件中定義的所有操作的方法。
- * 可以透過proxy物件直接呼叫函數
- * 優點:易於使用者使用
- */
- $client = $wsdl->getProxy( );
- $response = $client->getQuote("apple");
- if (PEAR::isError($response)) {
- echo '錯誤: ' . $response->getMessage() 。 "
n";
- } else {
- echo $response . "nn";
- }
- $response = $client->getFruit();
- if (PEAR:: isError($response)) {
- echo '錯誤:' 。 $response->getMessage() 。 "
n";
- } else {
- print_r($response) . "n";
- }
- 退出;
- ?>
複製;?>
|