gSoap访问Web Service
这里调用的是查询QQ状态的Service。http://www.webxml.com.cn/zh_cn/web_services.aspx?offset=2这里有很多免费的Service。
首先需要到下载gSoap开发包:我是从这下的http://www.cs.fsu.edu/~engelen/soapdownload.html
解压(我这里是直接放在C盘),C:\gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32目录有两个很重要的工具
接下来开始创建客户端程序:
第一个:从命令行进入C:\gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32目录
获取Web Service C++ 定义的头文件
第二步:生成客户端代理
发现有错而且没有生成任何文件:错误提示没有stlvector.h文件。需要到C:\gsoap_2.8.17\gsoap-2.8\gsoap\VisualStudio2005\wsdl2h\wsdl2h目录下把这个文件拷过来,跟QQWebService.h放在一起,然后再执行一遍刚刚的命令:
还是有错,还是少了soap12.h文件,该文件在C:\gsoap_2.8.17\gsoap-2.8\gsoap\import目录下。其实这种问题,我们可以打开QQWebService.h看看需要哪些文件。该头文件有两个语句#import "soap12.h"和#import"stlvector.h"。
这次成功生成代理文件。
第三步:使用生成的文件访问服务:
新建工程,把生成的文件拷过来,另外还需要C:\gsoap_2.8.17\gsoap-2.8\gsoap目录下的两个文件也拷过来。
处理shell命令:
gsoap demo c++方式: wsdl2h -o QQWebService.h http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl soapcpp2 -i QQWebService.h 或者 soapcpp2 -j QQWebService.h 出现: soapqqOnlineWebServiceSoapService.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall qqOnlineWebServiceSoapService::qqCheckOnline(class _ns1__qqCheckOnline *,class _ns1__qqCheckOnlineResponse &)" (?qqCheckOnline@qqOnlineWebServiceSoapService@@UAEHPAV_ns1__qqCheckOnline@@AAV_ns1__qqCheckOnlineResponse@@@Z) 1>soapqqOnlineWebServiceSoapService.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall qqOnlineWebServiceSoapService::qqCheckOnline_(class _ns1__qqCheckOnline *,class _ns1__qqCheckOnlineResponse &)" (?qqCheckOnline_@qqOnlineWebServiceSoapService@@UAEHPAV_ns1__qqCheckOnline@@AAV_ns1__qqCheckOnlineResponse@@@Z) gsoap demo c语言方式: wsdl2h -s -o QQWebService.h http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl soapcpp2 -i -x -C -L QQWebService.h 或者 soapcpp2 -j -x -C -L QQWebService.h demo2: wsdl2h -s -o calc.h http://www.cs.fsu.edu/~engelen/calc.wsdl soapcpp2 -i -x -C -L calc.h openapi: wsdl2h -s -o openapi.h http://10.0.0.103/server/openapi/server.php?wsdl soapcpp2 -i -x -C -L openapi.h
#include "qqOnlineWebServiceSoap.nsmap" #include "soapqqOnlineWebServiceSoapProxy.h" //该头文件已经包含了soapH.h int main() { printf("very good!\n"); qqOnlineWebServiceSoapProxy service; { _ns1__qqCheckOnline qqCheckOnline; qqCheckOnline.qqCode="492406070"; _ns1__qqCheckOnlineResponse response; service.qqCheckOnline(&qqCheckOnline,response); std::cout << "The value is "<<response.qqCheckOnlineResult<< std::endl; } system("pause"); return 0; }vs工程代码上传到百度云:
http://pan.baidu.com/s/1gdnL8dl