gSOAP 編譯工具提供了一個SOAP關於C/C++ 語言的實現,從而讓C/C++語言開發Web Services服務端或客戶端程序的工作變得輕鬆了很多。甚至,即使你對Web Services不甚瞭解都沒有關係,有了gSOAP這樣的工具,你也能開發基於SOAP方式實現的Web Services客戶端。
這是一個gSOAP官網的calc客戶端(C++版本)例子
首先,下載gsoap工具,解壓後將下邊幾個文件放在一起
在控制檯中,進入wsdl2h.exe 的目錄,執行下邊的命令。這個的作用是根據WSDL文件生成calc的頭文件,以便於生成cpp代碼
wsdl2h -o calc.h http://www.genivia.com/calc.wsdl
如下圖所示:
calc.h文件包含以下聲明(這裏只顯示了一個操作):
//gsoap ns2 schema namespace: urn:calc
//gsoap ns2 schema form: unqualified
//gsoap ns2 service name: calc
//gsoap ns2 service type: calcPortType
//gsoap ns2 service port: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi
//gsoap ns2 service namespace: urn:calc
//gsoap ns2 service transport: http://schemas.xmlsoap.org/soap/http
//gsoap ns2 service method-protocol: add SOAP
//gsoap ns2 service method-style: add rpc
//gsoap ns2 service method-encoding: add http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: add ""
//gsoap ns2 service method-output-action: add Response
int ns2__add(
double a, // Input parameter
double b, // Input parameter
double &result // Output parameter
);
接下來繼續在控制檯執行如下命令:
soapcpp2 -j -CL -I/path/to/gsoap/import calc.h
作用爲根據上面生成的頭文件生成C++框架代碼
結果如上圖所示。
接下來創建一個簡單的控制檯程序,來測試接口
// testCalc.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
#include "calc.nsmap" // XML namespace mapping table (only needed once at the global level)
#include "soapcalcProxy.h" // the proxy class, also #includes "soapH.h" and "soapStub.h"
int _tmain(int argc, _TCHAR* argv[])
{
calcProxy calc;
double sum;
if (calc.add(1.23, 4.56, sum) == SOAP_OK)
std::cout << "Sum = " << sum << std::endl;
else
calc.soap_stream_fault(std::cerr);
calc.destroy(); // same as: soap_destroy(calc.soap); soap_end(calc.soap);
system("pause");
return 0;
}
我一直卡在這裏很久,因爲每次編譯都會出現如下錯誤,在網上各種找答案也找不到,最後我查看了官方的zip內的例子,發現配置工程的時候,需要把文件包含進去,在編譯就不會出現這類問題了。
添加工程如下:
之後就可以編譯通過了,代碼結果如下: