devc++(devcpp) 玩轉 gsoap

  項目中,有個需求是終端調用webservice。我主要負責webservice這一塊,如果要測試的話要跟寫終端C程序的同事協調,這無疑很費時費力。那麼能不能我自己寫測試代碼測呢?

  終端是C通過gsoap生成客戶端來調用webservice的。於是開始看gsoap,由於C知識貧乏,調試了好久終於有眉目了。因爲機器上裝了vs2008,又不大想裝VC6,怕兼容性出問題。通過搜索找到一個交叉的編譯環境Devc++(devcpp),正合適不過了。下面就把我C通過gsoap調用webservice的整個過程摘要出來。相信你也可以輕鬆的完成。當然本案還是以經典的HelloWorld來完成。

1.準備工作:gsoap\Devc++(devcpp)。gsoap最新版是2.7.16,直接下載ZIP,解壓到目錄即可。Devc++是免費的,網上到處可下。

*可以將“X:\gsoap-2.7\gsoap\bin”添加到環境變量中,以便在在CMD中直接調用。

2.建立webservice:這一步就略過了,用C#寫一個返回“Hello World!”字符串的webservice,發佈即可。

3.保存wsdl共gsoap生成頭文件:瀏覽器訪問*.asmx?wsdl,將其另存爲*.wsdl。

4.根據wsdl生成C代碼:

wsdl2h -c -s WebService.wsdl //-c 爲指定生成純C的頭文件,-s不使用 slt

soapcpp2 -C WebService.h //-C 只生成客戶端的代碼

*注意,之前最好新建一個目錄,因爲程序會生成很多中間文件

5.Devc++編碼:

  [1]新建立一個C工程(我用的控制檯程序),添加相關的gsoap生成的c文件。

  soapC.c,soapClient.c,soapH.h,stdsoap2.c,WebService.h,WebServiceSoap.nsmap

  [2]完整代碼:

//#include <stdio.h>
//#include <stdlib.h>

#include "soapH.h"   //得到存根程序
#include "WebServiceSoap12.nsmap" //得到名稱空間映射表
       
int main(int argc, char *argv[])
{
    const char* server="http://192.168.1.107/WebService.asmx";   //webservice地址
struct soap hello_soap;    //soap對象
struct _ns1__HelloWorld helloWorlld;    //webservice對象
struct _ns1__HelloWorldResponse helloWorldResponse;    //響應對象
soap_init(&hello_soap);
int result=-1;
//調用接口
result = soap_call___ns2__HelloWorld(&hello_soap, server, "", &helloWorlld, &helloWorldResponse);
if(hello_soap.error){
    //在stderr流中打印soap的錯誤信息
    soap_print_fault(&hello_soap,stderr);
    result = hello_soap.error;
    }
    soap_end(&hello_soap);    // 清空已經並行化的數據
    soap_done(&hello_soap);   // 與gSOAP 環境相分離,關閉連接
    if (result != 0){
       printf("soap error ,errcode = %d ", result);
    }else{
       //正確返回,打印返回值
       printf("%s",helloWorldResponse.HelloWorldResult);
    }
return 0;
}

*遠程服務的接口定義在soapStub.h中。

    [3]編譯:因爲對編譯沒什麼概念,雖然知道調用webservice需要wsock32.lib這個庫,但連接時總是報錯。很明顯是編譯器找不到這個靜態庫。最後:

    菜單-》工具-》編譯選項-》在連接器加入如下命令行,使其爲checked,填入:

     wsock32.lib

   *注意要將wsock32.Lib複製到你的gsoap項目目錄中。

    [4]最後運行編譯好的exe文件,恭喜你!

本文爲原創,轉載請註明出處。

 

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