下面來總結下如何在linux平臺下進行開發。
首先,準備gsoap軟件,地址:http://gsoap2.sourceforge.net/,本人以前下載的是gsoap_2.7.15.tar.gz,並裝到linux平臺中,./configure(默認安裝在/usr/local/share/gsoap目錄下,也可以使用 ./configure –-prefix=/usr/local/gsoap指定安裝路徑) 默認安裝的話,/usr/local/bin>目錄下會有wsdl2h和 soapcpp2兩個程序。
wsdl2h:編譯wsdl文件生成c/c++頭文件。
soapcpp2:gSOAP編譯器,編譯頭文件生成服務器和客戶端都需要的 c/c++文件。
然後建立項目的文件夾,例:mkdir phonelocal,上一步安裝完成後,安裝路徑下會有stdsoap2.c,stdsoap2.h這兩個文件,把這兩個文件複製到新建的項目文件夾下,必不可少。至此,工具環境都算準備好了。
接下來就是要進行開發了,
首先,我們要得到wsdl文件(wsdl文件介紹),簡單來說,他就是來描述webservice接口的。一般只要在webservice地址後加“?wsdl” 就行,例如,我們項目的webservice地址是:http://60.179.124.102/websp/Service.asmx ,它對應的wsdl文件就是:http://60.179.124.102/websp/Service.asmx?wsdl 。
我們用wsdl2h工具通過以上wsdl文件來生成C/C++的頭文件。 命令執行如下: /usr/local/bin/wsdl2h -c -o phonelocal.h http://60.179.124.102/websp/Service.asmx?wsdl 。此處的頭文件名可以根據自己要求隨便取。
wsdl2h常用選項:
-o 文件名,指定輸出頭文件
-n 空間名前綴,代替默認ns
-c 產生純C代碼,否則是C++
-s 不要使用stl代碼
-t 文件名,默認使用typemap.dat(下文會詳細闡述)
-e 禁止enum加上命名空間前綴
然後用soapcpp2工具來生成存根文件,命令如下: soapcpp2 -c -C -x phonelocal.h
soapcp2常用選項:
-C 僅生成客戶端代碼
-S 僅生成服務器端代碼
-L 不要產生soapClientLib.c和soapServerLib.c文件
-c 產生純C代碼,否則是C++代碼(與頭文件有關)
-x 不要產生XML示例文件
-i 生成C++包裝,客戶端爲xxxxProxy.h(.cpp),服務器端爲xxxxService.h(.cpp)。
這一步生成如下文件:
- soapStub.h
// soap的存根文件,定義了phonelocal.h裏對應的遠程調用模型 - soapC.c soapH.h
// soap的序列和反序列代碼,它已經包含了soapStub.h,服務器端與客戶端都要包含它 - soapClient.c soapClientLib.c // 客戶端代碼,soapClientLib.c文件則只是簡單地包含soapClient.c和soapC.c
- ServiceSoap.nsmap ServiceSoap12.nsmap // 名空間定義,服務器端與客戶端都要包含它
因爲這個項目只需要做客戶端,所以在生成存根文件的時候用了-C,如果需要開發服務端的話,只要把這個去掉。本人暫時沒嘗試做過服務端,等下次有機會再試試。
接下來就開始要寫代碼了