標籤:webservice
本工程代碼使用情境:2個webservice client ,1個webservice(本來有2個webservice,但富盛的不由我們管理開發)。
FS(富盛) webservice client, ZS(卓視) webservice client. ZS(卓視) webservice.
本WebServiceClient 工程將FS(富盛) webservice client, ZS(卓視) webservice client合并到一個dll中。ZS(卓視) webservice為一個獨立進程。
現為webservice添加 ResetQueryRecordPerEncoderId 介面。以下是添加新介面過程:
webservice 端:
1.手動編寫pminfo.h,ns__ResetQueryRecordCounterPerEncoderId為新添加,標頭檔全內容如下:
(注意標頭檔裡“//”不是注釋,是gsoap指令,不可缺少)
//gsoap ns service name: PMInfo
//gsoap ns service protocol: SOAP
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:PMInfo
int ns__ResetQueryRecordCounterPerEncoderId(int encoder_id,int *result);
int ns__getFSwebserviceUrl(std::string *result);
int ns__getPM2_5(int encoder_id,int *result);
int ns__getPM10(int encoder_id,int *result);
int ns__getWindSpeed(int encoder_id,int *result);
int ns__getNoiseVal(int encoder_id,int *result);
2.在命令列中輸入以下命令,斷行符號,則會產生服務端所需檔案,最主要的是產生了 PMInfo.wsdl 檔案。以檔案可以反過來用wsdl2h.exe來產生標準的 gsoap標頭檔PMInfo.h(此檔案可另外命名)
soapcpp2.exe -S -x -i -L PMInfo.h -I./import/
3.執行 wsdl2h.exe -o PMInfo.h PMInfo.wsdl 產生 自動版 PMInfo.h 這裡面會將原來手動添加介面的指標類型轉換為參考型別。* =》 &
4.再執行 soapcpp2.exe -S -x -i -L PMInfo.h -I./import/ 產生自動版的參考型別gsoap相關檔案。
5.編譯WebServiceSvr 服務端工程,會產生WebServiceSvr.exe.此時服務端修改完成.
Client 端:
用戶端DLL因為糅合了兩個webservice client,故相對單一client 要複雜一些。主要是命名空間的命名和區分,其實就是為了讓兩套client 互相不干擾。因為原本soapH.h soapStub.h soapC.cpp 這些檔案如果在兩個client下會相互覆蓋,只有一個生效,故需用命名空間分開。
1.首先將剛產生的PMInfo.wsdl拷貝到 WebServiceClient 目錄 下,同時確保富盛的wsdl檔案(“FSWebService.wsdl”)也在此目錄下:
2.wsdl2h.exe -o FS.h -qFS FSWebService.wsdl 產生FS.h作為gsoap檔案(工程中不必包含).
3. wsdl2h.exe -o ZS.h -qZS PMInfo.wsdl 產生ZS.h
4. soapcpp2.exe -C -L -i -x -qZS ZS.h -I./import/ 產生卓視用戶端相關檔案 注意:-x 不產生xml檔案,這些檔案對編碼沒用,一大堆,顯得雜亂。-qZS 使用ZS命名空間
5. soapcpp2.exe -C -L -i -x -qFS FS.h -I./import/ 產生富盛用戶端相關檔案
6. soapcpp2.exe -C -penv env.h 產生環境標頭檔。(單用戶端 時沒有此檔案)
7. 編譯用戶端工程。結束。
Demo:
編譯testClientDLL進行測試。
本文出自 “軟體技術” 部落格,請務必保留此出處http://danielllf.blog.51cto.com/2442311/1856673
使用gsoap實現多用戶端,單服務端webservice