今天終於搞定了Qt+gsoap2.8的編譯了.
相關文章
第一步,下載gsoap2.8
地址:https://sourceforge.net/projects/gsoap2/files/
學習資料:https://www.genivia.com/dev.html
某大學資料: http://www.cs.fsu.edu/~engelen/soap.html
第二部:檢視WSDL
Qt貌似用哪個版本沒太大關係,gsoap匯出的程式碼可以連STL都不帶,跨平臺性做的很徹底了。
假設WSDL的url如下:
http://192.168.4.13:65153/edfx/WebService/webservice.asmx?op=ReadDispatchingPlanDataFromSAP
那麼,從url已經可以看出,
A, 我們webservice的地址(EndPoint)是 http://192.168.4.13:65153/edfx/WebService/webservice.asmx
B. 我們的操作介面是ReadDispatchingPlanDataFromSAP
或者看到如下描述
POST /edfx/WebService/webservice.asmx HTTP/1.1 Host: 192.168.4.13 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/ReadDispatchingPlanDataFromSAP"
但我們沒程式碼,因此先找到WSDL,一般如下:
http://192.168.4.13:65153/edfx/WebService/webservice.asmx?WSDL
這是全部介面都包含在內的頁面,描述也包括了,你的介面由哪個出口返回。
第三步:匯出程式碼
一直cd到gsoap的gsoap\bin\win32目錄下,會看到有兩個程式 wsdl2h.exe 和 soapcpp2.exe
wsdl2h.exe 根據WSDL內容,匯出一個頭檔案,就是把webservice的藉口C++函式化。
soapcpp2.exe 根據函式化後的標頭檔案,匯出需要用到的類和類程式碼。
兩個程式都可以加 -h 檢視詳細的配置例如:wsdl2h -h 和 soapcpp2 -h
使用之前建議大家先看看,否則後面我的配置是看不懂的,而且配置大小寫意義完全不同。
為了可以在win,linux甚至嵌入式裝置上執行,我使用瞭如下配置
wsdl2h -s -o test.h http://192.168.4.13:65153/edfx/WebService/webservice.asmx?WSDL
這樣test.h檔案就出來了,然後根據這個檔案,繼續以下指令
soapcpp2 -CLx -IF:\gsoap-2.8\gsoap\import test.h
這裡注意,我的soap原始碼放在F:\gsoap-2.8上了。
第四步:要注意的地方:
至此,其實gsoap要匯出的東西都匯出了。
把匯出的檔案都加入到工程內,要注意的是,會出現一個xxx.nsmap的檔案。
這個檔案需要當成是標頭檔案那樣include進去。
根據WSDL,一般的介面假設叫sendMessage,那麼就會有如下:
引數表用到的 傳入引數用的類 _ns1__sendMessage 和 傳出引數用的類 _ns1__sendMessageResponse
用到這些引數的函式 soap_call___ns1__sendMessage 這麼一套東西。
裡面除了soap操作類外,要填寫的endpoint和action都會自動填寫好。
配合Qt5.8在win和ubuntu16.04上都測試通過了。
demo緊供參考,因為demo內的網址是內網,程式碼也是通過內網的WSDL匯出,對一般使用沒有太大意義。
demo的下載地址:http://pan.baidu.com/s/1boTyDn5 --------------------- 作者:dronly 來源:CSDN 原文:https://blog.csdn.net/dronly/article/details/70772005 版權宣告:本文為博主原創文章,轉載請附上博文連結!