您的位置:首页 > 其它

gSoap访问Web Service 实例

2015-06-03 12:25 316 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: