gsoap初始化释放_通过gsoap使用webservice
一. 按照原来预研究的结果,使用gsoap的方法如下:
soapcpp2.exe -C weather.h -I E:\temp\gsoap-2.8\gsoap\import(E:\temp\gsoap-2.8\gsoap\import是我本地的路径),这样可以生成C++文件(soapClient.cpp, soapH.h, soapStub.h, WeatherWebServiceSoap.nsmap),然后还需要stdsoap2.cpp和stdsoap2.h 2个文件,编译的时候把这些文件加到工程中。调用的方法会在soapStub.h 头文件中产生。
参照了以后几个wiki:
二. 以上步骤我本地测试网上公开的天气接口,证明是可用的,后面第三方接口提供了,我安装以上方法去使用第三方的webservice接口,发现一些问题:
编译的时候出现找不到"stdafx.h"
解决:通过在响应的.cpp中最开始添加#include "stdafx.h",修复该编译错误
编译时遇到 stdsoap2.obj : error LNK2001: 无法解析的外部符号_namespaces
解决: stdsoap2.h,添加
#ifndef WITH_NONAMESPACES #define WITH_NONAMESPACES #endif
三. 以上问题解决后,又遇到一个更奇葩的问题,因为要调用第三方的二个接口,但是这二个接口确实二个不同的webservice,最开始我采取了比较普通的方法,按照gsoap的方法分别操作了二次,并且把这二次生成的文件放在了二个目录中,在工程中也是按照这样的结构添加文件,但是
编译的时候出问题"error C2374: “namespaces”: 重定义;多次初始化 gsoap",首先我就是谷歌了,按照一些搜索到的方法去做了,发现还是不行,造成这个问题的原因是因为使用多个webservice,每个.nsmap中都会定义struct Namespace,造成了重定义,怎么办呢?
解决: 后面找了些文章,发现我们可以将多个wsdl文件统一生成为一个头文件,然后再用这个统一的头文件来生成gsoap代码则不会有冲突问题了(解救了我啊),方式是:
wsdl2h -o file.h file1.wsdl file2.wsdl file3.wsdl‘
然后在执行【一】中的【2】,生成C++文件,这样做了后,生成了C++文件,然后加到项目中,编译,成功,小开心了一下,然后继续去测试能否获取到数据。测试的时候发现一直没有获取到数据,跟了下代码,发现返回调用公共的接口返回415错误,谷歌了下,发现是因为service端只支持 soap 1.1,而gsoap生成客户端代码默认是1.2
解决: gsoap 的soapcpp2的参数 -1 为soap 1.1 -2为soap1.2,具体就是把【一】【2】中的soapcpp2.exe -C weather.h -I E:\temp\gsoap-2.8\gsoap\import改成soapcpp2.exe -1 -C weather.h -I E:\temp\gsoap-2.8\gsoap\import,这样就支持soap1.1了。
改了之后再测试,发现一直返回12错误,崩溃~~~,网上找了好多,也没发现是什么问题。
为了解决问题,继续找啊,发现一个blog:gSoap编写代码访问WCF服务,发现这个博主使用的是代理类的形式,我想反正我那条路已经断了,要不也参照下这个blog试一下吧,说干就干,参照这,把gsoap的操作改成一下方式了:
wsdl2h.exe -v -o test.h WebService1.wsd WebService2.wsd
soapcpp2.exe -1 -C -j -I E:\temp\gsoap-2.8\gsoap\import test.h
然后把XXXProxy.cpp中的方法中的soap_endpoint的值改一下,为什么要改呢?因为默认gsoap会将所有的service的endpoint加在一起赋值给每个接口,这样就会出现类似
soap_endpoint=
"http://10.32.4.20:8012/QueryInterface.asmxhttp://10.32.4.20:9988/CommonService.svc";
的形式,其实我们需要的是
soap_endpoint = "http://10.32.4.20:8012/QueryInterface.asmx";
所以需要手动去把有类似问题的都改一下,改好后再重新编译,OK,都没有问题,继续测试,OMG,完美,可以正常访问,心里终于舒坦了。
四. gsoap设置超时
修改gsoap自动生成的代码才能进行超时设置(我这边访问web service的代码都是gsoap工具自动生成.根据wsdl接口)
找到生成的soapwwwsdlBindingProxy.cpp文件
找到你要设置超时的那个调用服务器的方法
找到该方法代码 struct soap *soap = this;
在该代码下添加如下三行代码(时间大小根据项目自行调整)
soap->recv_timeout = 2;//接受 (单位是秒)
soap->send_timeout = 2;//发送 (单位是秒)
soap->connect_timeout = 2;//连接(单位是秒)
--以上就是这次通过gsoap使用webservice的全部过程,记录下来,方便自己以后查阅,也希望对遇到同样问题的你,有所帮助。
以上有参考一下wiki:
gsoap之client端引用多个service时命名冲突
gsoap 调用 WCF 415 错误
gsoap初始化释放_通过gsoap使用webservice相关推荐
- gsoap初始化释放_gSOAP中文文档
1.背景 转贴 2 gSOAP文档翻译计划 2.1 gSOAP文档翻译计划(序) 前一阵子需要在unix c平台下创建一个webservice应用.头痛之余,上网查询相关资料,偶然发现了gSOAP开发 ...
- gsoap初始化释放_gsoap内存管理与释放
(一)gSoap客户端调用WebService完成后注意内存释放顺序 1 //Soap资源清理 2 soap_destroy(soap_sp.get()); //清理反序列化的类实例 3 soap_e ...
- Spark源码剖析 - SparkContext的初始化(八)_初始化管理器BlockManager
8.初始化管理器BlockManager 无论是Spark的初始化阶段还是任务提交.执行阶段,始终离不开存储体系.Spark为了避免Hadoop读写磁盘的I/O操作成为性能瓶颈,优先将配置信息.计算结 ...
- python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...
17.0 序 内存管理,对于python这样的动态语言是至关重要的一部分,它在很大程度上决定了python的执行效率,因为在python的运行中会创建和销毁大量的对象,这些都设计内存的管理.同理pyt ...
- 智能指针的释放_看完这篇,别再说不会智能指针了
C++智能指针 一.智能指针的作用 上一篇介绍了内存池的原理和实现,详情请见内存池设计与实现: 内存池可以帮助我们有效的对内存进行管理,智能指针可以很方便的管理指针,避免出现内存泄漏: 智能指针的作用 ...
- linux cached释放_正点原子Linux第四十一章嵌入式Linux LED驱动开发实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第四十一章嵌入式Linux LED驱动开发实验 上一章我 ...
- string 释放_由String,String Builder,String Buffer 引起的面试惨案
前言 String,StringBuilder,StringBuffer的区别是啥?这个面试题估计每个JAVA都应该碰到过吧.依稀记得第一次面试的时候,面试官问我这个问题时,心想着能有啥区别不都是拼接 ...
- 协议处理程序初始化失败_域间路由协议的内容有哪些 域间路由协议的内容介绍【详解】...
域间路由协议,域间路由协议的内容有哪些? 当前Internet被划分为多个自治系统,自治系统是一个实体,一般是指隶属于一个管理机构的路由器集合.每个自治系统可以制定自己的路由策略.自治系统内部的路由器 ...
- springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回 ...
最新文章
- IIS环境下如何批量添加、修改、删除绑定的域名
- 安信可ESP-12F(ESP8266)介绍与使用
- FFmpeg再学习 -- 视音频基础知识
- Java hdfs连接池_Java使用连接池管理Hdfs连接
- JDBC——编程式事务的实现逻辑
- Browser-Bookmark-Codeing
- hadoop集群之HDFS和YARN启动和停止命令
- 万字长文!搞定逃不脱的 DNS 面试题
- 蓝桥杯 ADV-16 算法提高 和最大子序列
- 生成树切分matlab_机器学习——手把手教你用Python实现回归树模型
- idea 新建java类 乱码,Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)
- 嵌入式Linux系统工程师系列之ARM920T的MMU与Cache
- 网站内容收录不稳定/不收录的原因分析
- NYOJ 小明的存钱计划
- Pandas+随机森林数模实战日记
- spring+vue前后端端分离上传图片到后台静态资源目录(适合个人小项目)
- VS关闭vue语法检测
- [Python深度学习入门]实战一·Numpy梯度下降求最小值
- IE低版本提示下载新的浏览器js--IEOutTips.zip
- 观点 | 银行业数据应用的瓶颈与打开思路
热门文章
- 比特(bit)_二进制数
- 如何通过命令终端访问本地/局域网/远程的MySQL数据库_访问数据库_连接数据库_登录数据库
- arch linux界面优化,Archlinux 启动优化
- php数组按时间排序,按日期时间在PHP中对数组中的数组进行排序
- c 中头文件和源文件的区别是什么
- C语言项目:绽放的玫瑰花
- php.c drcom,校园网绕过Drcom安装自动登录程序到路由器
- 淮安中专学计算机哪个学校好,2021淮安初中十强排名 哪些初中比较好
- java jar killed_容器中Java 程序OOMKilled原因浅析
- js 转化为实体符_js转html实体的方法