ONVIF學習筆記(2)gSOAP初探

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內的例子,發現配置工程的時候,需要把文件包含進去,在編譯就不會出現這類問題了。

添加工程如下:

之後就可以編譯通過了,代碼結果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章