C++實現WebService__C++

來源:互聯網
上載者:User
一、引言 
    Web Service其實就是一個應用程式,它向外界暴露出一個能夠通過Web進行調用的API,開發人員可以用編程的方法通過Web調用來實現某個功能的應用程式。從深層次上看,Web Service是一種新的Web應用程式分支,它們是自包含、自描述、模組化的應用,可以在網路(通常為Web)中被描述、發布、尋找以及通過Web來調用。 Web服務給人們帶來許多令人吃驚的好處,它具有在完全不同平台之間和互通性,在無處不在的網路上調用另一種Web服務的能力。由於web服務使用http協議通訊(通常使用80連接埠),因此天然地可以穿越防火牆。另外,我們可以使用各種語言來開發和調用Web服務,有利於企業業務的整合和資料重用。


    如上所述,我們可以使用各種語言開發web服務,但主要以Java和.NET為主,用C/C++開發web服務的工具不多,主要有Axis C++和gSoap。相比於Java版的Axis,Axis C++在安裝配置和開發部署新的Web服務都比較複雜,開發時要關注每一個細節,因為Axis C++[1]本身並沒有詳細的日誌資訊,當出現錯誤的時候很難跟蹤哪個環節出了問題。另外,Axis C++對WSDL資訊的內容要求非常嚴格,而且往往找不到問題所在。雖然存在一些問題,但是Axis C++在效能上還是很有優勢,也因此是許多Web服務開發人員的首選。[2]
    至於Axis C++的安裝配置,請參考其官方文檔[1]。另外,還可以使用gSoap[3]來開發C/C++的Web服務。 gSoap是一個開源項目,可以從SourceForge下載。


二、基本過程
   使用Axis C++開發Web服務的基本過程可以簡單描述如下:
   1、使用Java語言描述WEB服務
   2、使用Java2WSDL工具產生WSDL檔案
   3、使用WSDL2Ws工具產生服務端代碼架構
   4、編碼實現service,並部署服務
   5、使用WSDL2Ws工具產生用戶端代碼架構
   6、編碼實現用戶端
三、執行個體示範
   這裡以一個簡單的加法Add服務來說明用Axis C++構建webService的過程。


1、使用Java語言描述WEB服務
   Axis C++中我們必須先定義好WSDL後方可產生用來實現該服務的代碼架構,這一點與Axis Java不同。產生WSDL方法很多,可以使用Java2WSDL工具,當然也可以手工編寫,這裡我們使用Java2WSDL工具產生。下面我們對Add服務用Java語言描述:
   
  public interface Add{
     public int add(int x, int y);
  }


  我們只要方法的聲明即可,不需要實現方法,因此我們使用介面來定義。將上面的代碼儲存為Add.java。


2、使用Java2WSDL工具產生WSDL檔案
   javac Add.java   (產生.class檔案)
   java -Djava.ext.dirs=$AXISCPP_HOME/lib/axisjava  org.apache.axis.wsdl.Java2WSDL -o Add.wsdl -l"http://localhost/axis/Add" -n"http://localhost/axis/Add" Add  


   經過上面兩步,我們就可以得到Add.wsdl檔案。需要說明的是,產生的WSDL檔案有時會有錯(intf都成了impl),這可能是Java2WSDL工具的Bug。如果出現這種情況,可以和Axis C++內建的例子WSDL檔案對比。(註:我花了兩天時間才找出這個問題)
  
3、使用WSDL2Ws工具產生服務端代碼架構
   有上面的WSDL檔案,我們可以用WSDL2Ws工具產生服務端構架。
   java -Djava.ext.dirs=$AXISCPP_HOME/lib/axisjava -cp $AXISCPP_HOME/lib/axis/wsdl2ws.jar org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Add.wsdl -lc++ -sserver
   
   -s server 表示產生server代碼架構
   -l c++    表示產生C++代碼
   
4、編碼實現service,並部署服務
   上面產生的檔案中,我們只需要實現Add.cpp中的add方法即可。
   ... ...
   xsd__int Add::add(xsd__int Value0, xsd__int Value1)
   {
     return Value0+Value1;
   }
   ... ...
     
   對代碼編譯並連結產生.so動態庫:
   g++ -shared -I$AXISCPP_HOME/include -o libadd.so *.cpp
   
   對服務進行部署,步驟如下:
   (1).將產生的libadd.so檔案複製至$AXISCPP_DEPLOY/lib目錄
   (2).複製Add.wsdl檔案至$AXISCPP_DEPLOY/wsdls目錄
   (3).編輯AXISCPP_DEPLOY/etc/server.wsdd檔案並在相應位置添加如下內容:
       <service name="Add" provider="CPP:RPC" description="Add Service ">
             <parameter name="className" value="/apache/axiscpp/lib/libadd.so"/>
      <parameter name="allowedMethods" value="add "/>
       </service>
   (4).重新啟動HTTP服務
   (5).檢查http://localhost/axis是不否有新增的Add服務


   為了測試我們發布的Web服務是否工作正常,我們下面利用Axis C++來產生調用該服務的用戶端代碼並進行測試。


5、使用WSDL2Ws工具產生用戶端代碼架構
   java -Djava.ext.dirs=$AXISCPP_HOME/lib/axisjava -cp $AXISCPP_HOME/lib/axis/wsdl2ws.jar org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Add.wsdl -lc++ -sclient
   
   -s client 表示產生client代碼架構
   -l c++    表示產生C++代碼


6、編碼實現用戶端   
   上述命令產生了Add.hpp, Add.cpp,我們再編寫用戶端入口程式 AddClient.cpp:
   #include "Add.hpp"
   #include <stdio.h>
                                                                                                   
   int main(int argc, char** argv)
   {
     Add ws("http://localhost/axis/Add");
     int sum;
     if(argc<2)
     {
       printf("Usage:%s num1 num2\n", argv[0]);
       return -1;
     }
     sum = ws.add(atoi(argv[1]),atoi(argv[2]));
     printf("%d\n",sum);
     return 0;
  }


  編譯用戶端,產生可執行檔:
  g++ -I$AXISCPP_HOME/include -L$AXISCPP_DEPLOY/lib -laxis_client -ldl -o Add *.cpp


  之後,可以用Add命令測試服務工作是否正常。
 


四、參考文獻
1、官方網站:http://ws.apache.org/axis/
2、Linux下使用Axis C++構建Web服務:http://www.javayou.com/showlog.jspe?log_id=580
3、用C實現WebService:http://www.hnlinux.net/bbs/simple/index.php?t2303.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.