windows下使用开源gSOAP技术调用WebService
大名鼎鼎的gSOAP Toolkit 这里就不多做介绍了,此次的WebService访问即是借助此工具开发的,获取最新版本可以上sourceforge获取,此处是下载地址http://sourceforge.net/projects/gsoap2/,这里使用的是2.8版本。
首先通过WSDL文档生成C++头文件
WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。 通过WSDL生成访问接口:(http://10.130.40.220:9081/dcmsWebservice/webservice/unifiedMessage?wsdl为此次调试WebService接口)设定c/c++工程名称为TestWebService(Console程序,其他应用程序类型也可),在该文件夹下面建立TestWebService.h文件。 启动cmd,进入到下载下来的gSoap包的解压路径,然后在解压出来的根目录下找到\gsoap\bin\win32目录,调用wsdl2h.exe程序生成TestWebService.h头文件接口定义。 wsdl2h -s –o x:/xxx/TestWebService.hhttp://10.130.40.220:9081/dcmsWebservice/webservice/unifiedMessage?wsdl 这里提供一下该目录下两个可执行文件的常用选项: wsdl2h常用选项
- -o 文件名,指定输出头文件
- -n 名空间前缀 代替默认的ns
- -c 产生纯C代码,否则是C++代码
- -s 不要使用STL代码
- -t文件名,指定type map文件,默认为typemap.dat
- -e 禁止为enum成员加上名空间前缀
soapcpp2常用选项
- -C 仅生成客户端代码
- -S 仅生成服务器端代码
- -L 不要产生soapClientLib.c和soapServerLib.c文件
- -c 产生纯C代码,否则是C++代码(与头文件有关)
- -I 指定import路径(见上文)
- -x 不要产生XML示例文件
- -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
然后解析TestWebService.h文件,生成存根程序(若需要纯C语言可以使用-c,而非-C,具体可参看常用选项):soapcpp2 –C x:/xxx/TestWebService.h 执行成功之后在当前路径下生成下列文件: 如果在执行该步骤时如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" forreading. “, 那是因为我们的头文件使用了STL(wsdl2h 没用-s选项 ),这时要使用-I选项指定gSOAP的 import文件路径,这个路径是"$gsoap\gsoap\import ",$gsoap为解压目录: soapcpp2 hello.h -I xx\gsoap\import
使用生成的头文件调试WebService
建立以TestWebService为名称的console工程,将生成的soapC.cpp、soapH.h、soapStub.h、soapunifiedMessageSoapBindingProxy.h、soapClient.cpp、unifiedMessageSoapBinding.nsmap拷贝到工程目录并加入到工程中; 然后将在gsoap解压目录下的stdsoap2.h,stdsoap2.cpp拷贝到工程目录并加入到工程中。需要注意的是:1、stdsoap2.cpp、soapC.cpp、soapServiceSoapProxy.cpp 不需要预编译2、常见错误示例: 如error C1010 ,一般是预编译头文件的问题,在主函数中需要选预编译,添加 StdAfx.h;如error LNK2001,一般是在网络编程中需要WSOCK32.lib,添加上即可。 此时工程结构如下: 新建TestWebService.cpp,cpp结构如下,包含main函数整体代码:
- #include "soapH.h"
- #include "unifiedMessageSoapBinding.nsmap"
- #include "soapStub.h"
- #include "stdsoap2.h"
- #include "md5.h"
- #include <iostream>
- #include <string>
- using namespace std;
- std::string UTF8ToGB(const char* str);
- int main()
- {
- struct ns1__doServiceResponse loginResponse;
- string m_strRespContent = "";
- struct soap clientSOAP;
- // 产生MD5摘要
- char buf[64] = {0};
- char digest[16] = {0};
- char printable[64] = {0};
- strcpy(buf, "1001");
- md5_state_t state;
- md5_init(&state);
- md5_append(&state, (const md5_byte_t *)buf, strlen(buf));
- md5_finish(&state, (md5_byte_t *)digest);
- md5_digest_printable((md5_byte_t *)digest, printable, sizeof(printable));
- soap_init(&clientSOAP);
- if(soap_call_ns1__doService(&clientSOAP, NULL,
- NULL, "3000", "1001", "1001", "ucdsAddress", loginResponse._return_) == SOAP_OK)
- {
- m_strRespContent = UTF8ToGB(loginResponse._return_);
- printf(m_strRespContent.c_str());
- }
- else
- {
- printf("Error\n");
- }
- soap_destroy(&clientSOAP);
- soap_end(&clientSOAP);
- soap_done(&clientSOAP);
- while(1);
- return 0;
- }
其中soap_call_ns1__doService即为此WebService的功能接口,可以在生成的soapClient.cpp中查看此接口,到这里对此WebService的基础调用就全部完成了。
windows下使用开源gSOAP技术调用WebService相关推荐
- gSoap客户端调用WebService完成后注意内存释放顺序
gSoap客户端调用WebService完成后注意内存释放顺序 [cpp] view plaincopy //Soap资源清理 soap_destroy(soap_sp.get()); //清理反序 ...
- 计算机病毒的隐藏方式有ign,浅谈windows下的病毒隐藏技术.doc
浅谈windows下的病毒隐藏技术 浙江工业职业技术学院 毕业论文 (2011届) 浅谈windows下的病毒隐藏技术 学生姓名 学 号 分 院 专 业 信 指导教师 完成日期 2011年5月 19日 ...
- Windows下多鼠标/双鼠标技术专题
Technorati 标签: Windows,MultiPoint,多鼠标,多指针输入,SDG,Mouse,RawInput 首先要说的是,此文的主要内容都来自本人 在 湖南大学 郑善贤 老师指导下写 ...
- Windows下基础免杀技术
0x01.杀软查杀原理 1.免杀的概念 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字翻译为&qu ...
- Windows下usb接口驱动技术(二)
八. Windows驱动程序模型 Windows环境下驱动程序共有三类,一类是VxD( Virtual Device Driver,虚拟设备驱动程序),起源于Windows 3.1 时代 ...
- [Tools]Windows下Binwalk安装和快捷调用
更新设备,重新安装了许多工具,这里总结下Binwalk的Windows安装和快速调用方法. 介绍 Binwalk是一个固件的分析工具,旨在协助研究人员对固件非分析,提取及逆向工程用处.简单易用,完全自 ...
- windows 下用开源流媒体压力测试工具 rtmpstress 测试RTMP媒体服务器负载性能
最近笔者的朋友需要部署流媒体服务作运营,从国外购买了几套流媒体服务器软件,该流媒体服务器软件是基于java开发的,他向笔者咨询,如何检测该流媒体服务器软件是否能支持1000以上并发,笔者建议找一个RT ...
- 在windows下CorelDraw中VBE的调用原理?
文章目录 1.谁加载了这几个库 2.apc71是什么? 3.作者答疑 直接启动CorelDraw,查看其加载模块,发现并没有加载VBE7.DLL.VBEUI.DLL和VBEUIRES.DLL,说明启动 ...
- windows下如何用cmd命令调用USB打印机打印
本以为这种命令应该很简单就能搜索到--实际上却花了好一会时间才查到,而且还是一个稍稍麻烦的方法 1.打印机 首先, 我是用的是usb打印机, 在使用前还要安装相应产品的驱动,正常鼠标操作打印时没有问题 ...
最新文章
- 组件化 Todo List 编写笔记
- 2021年春季学期-信号与系统-第十三次作业参考答案-第六小题
- Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
- oracle取得序列当前值(不改变当前序列值)
- kotlin学习之类委托(八)
- 卷积神经网络minst的verilog实现
- 13、mysql中视图的应用
- centos7下安装mysql8社区版的过程,20200129
- TutorialsPoint 电子书 归档 2017
- Scrapy框架的介绍和基本使用
- 深入理解JavaScript的设计模式
- opencv python 人脸识别 相似度_Python学习:基于Opencv来快速实现人脸识别(完整版)...
- pymc3学生成绩分析和预测(补充+翻译)
- go-ipfs-api
- win10 pycharm安装使用 MySQLdb
- 你的数据库到底应该如何存储密码?
- 微软翻译离线简体中文服务器,第一次使用微软翻译应用只有英语离线语言包
- vue简单的数字滚动动画
- 如何使用stc12c5a60s2控制蜂鸣器
- 理解梅尔频谱(mel spectrogram)