今天終於搞定了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

                                         


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com