五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > php soap 開(kāi)發(fā)文檔

php soap 開(kāi)發(fā)文檔

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):1114    更新時(shí)間:2009-10-23 08:50   參與評(píng)論

php soap 開(kāi)發(fā)文檔

必備知識(shí)

1.wsdl(web服務(wù)標(biāo)記語(yǔ)言)

       WSDL(網(wǎng)絡(luò)服務(wù)描述語(yǔ)言,Web Services Description Language)是一門(mén)基于 XML 的語(yǔ)言,用于描述 Web Services 以及如何對(duì)它們進(jìn)行訪問(wèn)。

      具體參考請(qǐng)?jiān)L問(wèn)下面網(wǎng)址

      http://theartemis.cn/wsdl/index.asp

 

2.soap

      SOAP 是一種簡(jiǎn)單的基于 XML 的協(xié)議,它使應(yīng)用程序通過(guò) HTTP 來(lái)交換信息。

      具體參考請(qǐng)?jiān)L問(wèn)下面網(wǎng)址

      http://theartemis.cn/soap/index.asp

3.php擴(kuò)展

具體參考請(qǐng)?jiān)L問(wèn)下面網(wǎng)址

http://php.net/manual/en/book.soap.php

 

二. php soap開(kāi)發(fā)模式

1. working in swdl mode(契約先行(Contract first)模式)

  契約先行模式使用了一個(gè)用XML定義的服務(wù)接口的WSDL文件。WSDL文件定義了服務(wù)必須實(shí)現(xiàn)或客戶(hù)端必須使用的接口。SoapServerSoapClientWSDL模式就基于這個(gè)概念。也就是用soap通訊的時(shí)候必須先有一個(gè)定義過(guò)的服務(wù)接口,才能進(jìn)行通訊。

  

2. working in non-swdl mode(代碼先行(Code first)模式)

   在代碼先行模式中,首先要先寫(xiě)出實(shí)現(xiàn)服務(wù)的代碼。然后在大多數(shù)情況下,代碼會(huì)產(chǎn)生一個(gè)契約,換種說(shuō)法,一個(gè)WSDL。接著客戶(hù)端在使用服務(wù)的時(shí)候就可以使用那個(gè)WSDL來(lái)獲得服務(wù)的接口。盡管如此,PHP5的擴(kuò)展并沒(méi)有從代碼輸出一個(gè)WSDL的規(guī)定,考慮到這種情況,可以在non-WSDL模式下使用 SoapServerSoapClient。也就是說(shuō)在soap通訊的時(shí)候并不需要一個(gè)預(yù)先定義過(guò)的服務(wù)接口,代碼會(huì)自動(dòng)的產(chǎn)生。

 

三.參考例子:

  下面介紹如何使用WSDL模式和non-WSDL模式來(lái)實(shí)現(xiàn)服務(wù)和客戶(hù)端。相對(duì)而言,使用WSDL模式來(lái)實(shí)現(xiàn)服務(wù)和客戶(hù)端會(huì)比較容易。

 

1. noWSDL模式實(shí)現(xiàn)

 

服務(wù)端 server.php

<?php

class test

{

      /**

       *

       * @return string

       */

      function show()

      {

           return 'hello world!';

      }

}

#####################################################

$server = new SoapServer(null, array('uri' => "http://test-uri/"));

$server->setClass('test');

$server->handle();

?>

 

客戶(hù)端 client.php

<?

$soap=new SoapClient(null, array(

'location' =>'http://soapserver_url/server.php',

                                                  'uri' => "http://test-uri/"));  

                                                                    

print_r($soap->__getFunctions());

echo $soap->show();

?>

 

2. WSDL模式實(shí)現(xiàn)

第一步:編寫(xiě)服務(wù)端類(lèi)文件

class..php

<?php

class test

{

      /**

       *

       * @return string

       */

      function show()

      {

           return 'hello world!';

      }

}

?>

 

第二步:將類(lèi)文件生成 wsdl文件server.wsdl。

     由于wsdl文件編寫(xiě)比較復(fù)雜,所以我們用第三方工具生成。我們以zend studio為例子演示:

 Tools ==> WSDL Generator ==> Configration name : test; WSDL file name: server

 ==>NEXT ==> 點(diǎn)擊 + ==> 選擇上面的創(chuàng)建的class.php ==> 這時(shí)候會(huì)看到一個(gè) classes?? : URL Location的映射,保留 test類(lèi)前面的勾,并將其url 設(shè)置為 SOAP Serverurlhttp://soapserver_url/server.php ==>點(diǎn)擊FinishZDE就會(huì)創(chuàng)建一個(gè)非常漂亮的WSDL?? 工作基本上完成了.

 

第三步:服務(wù)端編寫(xiě):

<?php

require ' class..php ';  //引入類(lèi)文件

 

$server = new SoapServer('server.wsdl');

$server->setClass('test');

$server->handle();

?>

 

第四步:客戶(hù)端編寫(xiě)

$soap = new SoapClient('http:// soapserver_url/server.wsdl');

 

print_r($soap->__getFunctions());

echo $soap->show();

 

 

      以上兩個(gè)例子只是一個(gè)簡(jiǎn)單的soap服務(wù)編寫(xiě),已經(jīng)可以滿足大部分需要。如果需要更加高級(jí)的功能請(qǐng)參考其他方面的資料。

三. 出現(xiàn)的問(wèn)題。

1.在方法中對(duì)屬性的賦值在其他方法中不起作用。

      比如在客戶(hù)端調(diào)用服務(wù)端某個(gè)方法對(duì)某個(gè)屬性賦值。

在其他方法里就不能用。但在 __construct 方法中對(duì)屬性的賦值是可以個(gè)在其他方法中使用的。

2. 提示 Client] looks like we got no XML document錯(cuò)誤。

      服務(wù)器端文件在<?php ?> 標(biāo)簽前后都不要有任何數(shù)據(jù)包括空格,空行。

 

3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity

原因如下:PHP程序作為 SOAP客戶(hù)端 采用 WSDL 模式訪問(wèn)遠(yuǎn)端服務(wù)器的時(shí)候,PHP是通過(guò)調(diào)用 libcurl 實(shí)現(xiàn)的。至少在 PHP5.2.X 是這樣的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 沒(méi)有缺省安裝 libcurl,也許是我沒(méi)有安裝。除了 ibcurl以外,至少還關(guān)聯(lián)的庫(kù)包括:

libidn,ibgcc,libiconv,libintl,openssl

最近參與的項(xiàng)目,希望大家互相討論,共同進(jìn)步。

世界工廠網(wǎng) www.gongchang.com

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (1114人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱(chēng):
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢(xún)

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)