C++客户端 如何通过gsoap调用WebService接口(以及返回结果乱码解决办法)
来源:互联网 发布:网络大电影发行流程 编辑:程序博客网 时间:2024/06/07 05:04
项目里遇到要调用webService接口的地方,网上找了一下gsoap还是比较方便通用,所以总结一下使用的方法,方便下次调用。
1. 要下载gsoap版本。网上很多,连接就不附上链接了,我这里用的版本是gsoap_2.8.19
2. 用cmd命令进入到目录下的gsoap\bin\win32 下,
调用 wsdl2h .exe生成头文件格式如下:
wsdl2h 参数 头文件 webService的路径 如
wsdl2h.exe -o test.h http://www.cs.fsu.edu/~engelen/calc.wsdl,
参数说明:
-o 文件名,指定输出头文件
-n 名空间前缀 代替默认的ns
-c 产生纯C代码,否则是C++代码
-s 不要使用STL代码
-t 文件名,指定type map文件,默认为typemap.dat
-e 禁止为enum成员加上名空间前缀
type map文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写xsd__string = | std::wstring | wchar_t*
那么SOAP/XML中的string将转换成std::wstring或wchar_t*,这样能更好地支持中文
3. 从头文件中生成存根程序文件
在此之前,现将gsoap\import\ 下stlvector.h拷贝到当前目录,因为默认使用时STL的所以需要。
使用soapcpp2 生成存根程序文件,格式: soapcpp2 参数 头文件
soapcpp2.exe -L -x -C -I D:\gsoap-2.8\gsoap\import test.h -i
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定imp<wbr>ort路径(见上文) </wbr>
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
这里一般需要带上-x,不然会生成一大堆的xml文件。
-i选项也要带上,不然不会生成soapXXXXBindingService.cpp和soapXXXXBindingService.h文件
-I 选项一般也要带上,-I 后接gsoap路径中import目录
一般是-I E:\workspace\onvif\gsoap-2.8\gsoap\import;E:\workspace\onvif\gsoap-2.8\gsoap这样的
区分大小写很重要,本人在这里耗费了不少时间。
生成如下文件:
连同import文件夹下的stlvector.h、 stdsoap2.h、stdsoap2.cpp一起加入到客户端工程中。
4、调用webService接口
取消soapC.cpp,soapClient.cpp,stdsoap2.cpp这三个文件的预编译头, 工程包含#include "soapXXXProxy.h"
#include "XXX.nsmap" 文件, 然后再具体调用:
XXXProxy service;
ns1__Request request;
request.arv1 = "XXX";
request.arv2 = "XXX";
...
ns1__Response response;
service.接口1(&request, response);
具体参数按接口定义来。调用完毕, 就这么简单。还是比较实用的
PS: 如果返回结果显示中文乱码的话,解决方法如下:
1、在合适的位置设置中文码:
//936是简体中文的代码页,
std::locale loc1 = std::locale::global(std::locale(".936"));
2、XXXProxy service(SOAP_C_MBSTRING); //设置soap模式
其他解决方法网上也有,不过个人感觉这种比较简单。
PS2: 设置soap超时时间(单位:s),直接在proxy类的构造中添加就可以.
accept_timeout = 10 ;
send_timeout = 20 ;
recv_timeout = 20 ;
- C++客户端 如何通过gsoap调用WebService接口(以及返回结果乱码解决办法)
- C++客户端通过gSOAP调用WebService
- C++客户端通过gSOAP调用WebService
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口
- gsoap生成webservice调用客户端接口 .
- gsoap生成webservice调用客户端接口
- 生成webservice接口以及通过客户端调用接口。
- C++通过gsoap做WebService接口 供C++及java客户端调用
- C/C++通过gSoap发布webservice接口,供ASP.Net网站工程调用
- 标准C/C++程序通过gSOAP调用WebService
- 标准C/C++程序通过gSOAP调用WebService
- 标准C/C++程序通过gSOAP调用WebService
- 标准C/C++程序通过gSOAP调用WebService
- 使用C/C++程序通过gSOAP调用WebService
- 标准C/C++程序通过gSOAP调用WebService
- URAL 1900. Brainwashing Device(dp+输出路径)
- JS 基础 用法
- Touch
- hdoj-1171-Big Event in HDU【动态规划】
- JAVA 程序 对给定整数60,获取其16进制表现形式
- C++客户端 如何通过gsoap调用WebService接口(以及返回结果乱码解决办法)
- cosme大赏卸妆部门第二位:Peau Blanche卸妆水之体验报告
- java发送邮件(1)
- zoj 3612 ——Median
- 一行字符中寻找英文单词个数
- url
- 指纹识别的基本原理
- java - (04) 域名
- “The run destination iOS Device is not valid for running the scheme”