gSOAP 在windows下的安装与使用(mingw32)
gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于 gSOAP具 有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SOAP服务。
(一)安装
gSOAP的主页是:
http://sourceforge.net/projects/gsoap2
下载解压后,可以在gsoap\bin\win32里 找到wsdl2h.exe和soapcpp2.exe(另外 mac版本)。
根据实践证明,windows下可以不用像https://www.genivia.com/downloads.html#releases文中所说如下图编译安装,直接使用。
当然想重新编译安装也是可以的。具体步骤如下:
首先根据说明“Tip: when autoconf, automake, flex, bison, openssl-devel, and zlib-devel are installed you can run configure to build the gSOAP tools and libraries as follows:”
需要安装以上几个库和工具,否则后面的编译会出错。
具体可以使用mingw-get.exe安装
完成以上安装后,接着可以进行gsoap编译安装
1、打开mingw32->msys目录下的终端“msys.bat 美化mintty”,记得用美化mintty版,这样可以使用右键copy。进入gsoap解压后的目录
2、执行./configure
3、执行make
4、安装,执行make install
完成以后会将soapcpp2、wsdl2h工具及库等安装部署到以下目录
根据实践证明,生成的wsdl2h运行无法正常使用
所以不建议编译安装,如果实在要使用可以将gsoap源文件夹win32下的该程序拷贝过来替换。
最后是要在windows环境变量中加入以上安装目录中的bin、lib、include等目录,记得实在不同的环境变量中哦。
如果不编译安装,而是直接使用gsoap源文件夹win32则环境变量中加入该目录即可。
当然不加入以上lib、include亦可,只需在编程工具的工程项目中增加即可,netbeans、qt等工具都可以添加。
(二)使用demo
这个参考https://blog.csdn.net/qianqiuwanzi/article/details/24120455
(以经典的calc为例)
使用gsoap\bin\win32目录中的两个应用:soapcpp2.exe和wsdl2h.exe,生成客户端和服务器端框架。
使用gSOAP生成客户端和服务器端代码框架。我们有两种做法:
- 编写WSDL,使用wsdl2h生成头文件,再通过soapcpp2生成框架代码;
- 编写头文件,使用soapcpp2生成框架代码;
经常使用的一些指令如下:
-o filename.h 将wsdl转化为filename.h头文件。
-s 不生成STL代码
-c 生成纯C风格的头文件,这将去除C++的一些特性
-n name 使用name代替默认前缀ns
-t filename.dat 使用filename.dat代替默认的typemap.dat文件
-zX 兼容之前的X版本
calc.h部分代码如下
/******************************************************************************\
* *
* Services *
* *
\******************************************************************************/ //gsoap ns2 service name: calc
//gsoap ns2 service type: calcPortType
//gsoap ns2 service port: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi
//gsoap ns2 service namespace: urn:calc
//gsoap ns2 service transport: http://schemas.xmlsoap.org/soap/http /** @mainpage calc Definitions @section calc_bindings Service Bindings - @ref calc @section calc_more More Information - @ref page_notes "Notes" - @ref page_XMLDataBinding "XML Data Binding" - @ref SOAP_ENV__Header "SOAP Header Content" (when applicable) - @ref SOAP_ENV__Detail "SOAP Fault Detail Content" (when applicable) */ /** @page calc Binding "calc" @section calc_service Service Documentation "calc"
gSOAP 2.7.9k generated service definition @section calc_operations Operations of Binding "calc" - @ref ns2__add - @ref ns2__sub - @ref ns2__mul - @ref ns2__div - @ref ns2__pow @section calc_ports Default endpoints of Binding "calc" - http://websrv.cs.fsu.edu/~engelen/calcserver.cgi @note Use wsdl2h option -Nname to change the service binding prefix name */
//gsoap ns2 service method-protocol: add SOAP
//gsoap ns2 service method-style: add rpc
//gsoap ns2 service method-encoding: add http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: add ""
//gsoap ns2 service method-output-action: add Response
int ns2__add(
double :a, ///< Input parameter, : unqualified name as per RPC encoding
double :b, ///< Input parameter, : unqualified name as per RPC encoding
double &:result ///< Output parameter, : unqualified name as per RPC encoding
); //gsoap ns2 service method-protocol: sub SOAP
//gsoap ns2 service method-style: sub rpc
//gsoap ns2 service method-encoding: sub http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: sub ""
//gsoap ns2 service method-output-action: sub Response
int ns2__sub(
double :a, ///< Input parameter, : unqualified name as per RPC encoding
double :b, ///< Input parameter, : unqualified name as per RPC encoding
double &:result ///< Output parameter, : unqualified name as per RPC encoding
); //gsoap ns2 service method-protocol: mul SOAP
//gsoap ns2 service method-style: mul rpc
//gsoap ns2 service method-encoding: mul http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: mul ""
//gsoap ns2 service method-output-action: mul Response
int ns2__mul(
double :a, ///< Input parameter, : unqualified name as per RPC encoding
double :b, ///< Input parameter, : unqualified name as per RPC encoding
double &:result ///< Output parameter, : unqualified name as per RPC encoding
); //gsoap ns2 service method-protocol: div SOAP
//gsoap ns2 service method-style: div rpc
//gsoap ns2 service method-encoding: div http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: div ""
//gsoap ns2 service method-output-action: div Response
int ns2__div(
double :a, ///< Input parameter, : unqualified name as per RPC encoding
double :b, ///< Input parameter, : unqualified name as per RPC encoding
double &:result ///< Output parameter, : unqualified name as per RPC encoding
); //gsoap ns2 service method-protocol: pow SOAP
//gsoap ns2 service method-style: pow rpc
//gsoap ns2 service method-encoding: pow http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: pow ""
//gsoap ns2 service method-output-action: pow Response
int ns2__pow(
double :a, ///< Input parameter, : unqualified name as per RPC encoding
double :b, ///< Input parameter, : unqualified name as per RPC encoding
double &:result ///< Output parameter, : unqualified name as per RPC encoding
);
接着生成源文件:
soapcpp2 头文件
常用选项
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文)
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。--wsj本人建议加上
在cmd命令行下进入工程目录,执行:
soapcpp2 -L -w -x -i -I D:\tools\gsoap-2.8\gsoap\import calc.h
通过netbeans创建工程项目soap_calc(client)
并将生成的soapC.cpp、soapH.h、soapStub.h、soapcalcProxy.h、soapcalcProxy.cpp、calc.nsmap、stdsoap2.h和stdsoap2.cpp文件加入到工程,其中stdsoap2.h和stdsoap2.cpp为gsoap文件夹中的文件拷贝过来即可,如果是c语言则stdsoap2.cpp替换为stdsoap2.c。
客户端代码如下
#include <cstdlib>
#include "calc.nsmap"//一定要加,不要忘记
#include "soapcalcProxy.h" using namespace std; /*
*
*/
int main(int argc, char** argv) {
calcProxy calc_clnt;
double add;
int ret=calc_clnt.add(,,add);
if(ret==SOAP_OK) {
printf("add=%lf", add);
}else
{
printf("err_code=%d", ret);
}
return ;
}
运行结果
编译工程时特别要注意加上其它编译项和库
netbeans中在
中设置即可。
qtcreator只需在pro文件里添加即可
注意事项(关键):---wsj
当直接使用 soapcpp2 头文件 生成文件时,如果头文件的命名是
int downloadCAGCtrl(std::string strXMLParams,std::string *strXMLResult);时
使用soapcpp2 I2Server.h命令只能生成以下文件,无法生成wsdl、xml类型文件,这个wsdl文件在此头文件生成webservice服务端的时候很关键,在webservice调用的时候要使用。
这时候,就要将头文件内容修改下:
int ns__downloadCAGCtrl(std::string strXMLParams,std::string *strXMLResult);
对了就是在函数名前面加了命名空间名字,通常用默认的ns__
同样的命令:soapcpp2 I2Server.h 结果如下
服务端的话,建议采用命令soapcpp2 -L -S -i I2Server.h
结果:
gSOAP 在windows下的安装与使用(mingw32)的更多相关文章
- memcache的windows下的安装和简单使用
原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...
- Windows下pry安装和配置
Windows下pry安装和配置 pry是一个增强型的交互式命令行工具,比irb强大. 有自动完成功能,自动缩进,有颜色.有更强大的调试功能. pry 安装很简单. 在终端输入: gem instal ...
- Windows下虚拟机安装Mac OS X ----- VM12安装Mac OS X 10.11
Windows下虚拟机安装Mac OS X -– VM12安装Mac OS X 10.11 随着Iphone在国内大行其道,越来越多的开发者涌入iOS开发大军 中,但都苦于没有苹果机,本文即将介绍WI ...
- Windows下memcache安装使用
Windows下Memcache安装 随着时间的推移,网上现在能找到的在 Windows下安装 Memcache 的文档大多已经过时.雪峰这里再简要介绍一下当下最新版的安装和配置方法. Memcach ...
- Windows 下如何安装配置Snort视频教程
Windows 下如何安装配置Snort视频教程: 第一步: http://www.tudou.com/programs/view/UUbIQCng360/ 第二部: http://www.tudou ...
- 在windows下完美安装GitHub
笔者最近在Windows下安装GitHub,过程中遇到不少问题.现在把安装的详细步骤分享给大家,免得大家走弯路. 笔者安装了GitHub for Windows程序,一切都运行顺利.但事情没有结束,首 ...
- windows下Eclipse安装Perl插件教程
windows下Eclipse安装Perl插件教程 想用eclipse编写perl.网上看了很多资料.但EPIC插件的下载连接都失效了.无奈,只好自己动手写个教程记录一下. 准备工作: 安装好Ecli ...
- Ruby入门--Linux/Windows下的安装、代码开发及Rails实战
Ruby入门--Linux/Windows下的安装.代码开发及Rails实战 http://www.linuxidc.com/Linux/2014-04/100242.htm Ubuntu 13.04 ...
- mediawiki在windows下的安装
mediawiki在windows下的安装 对于刚接触wiki的朋友们来说,配置一个服务器环境,安装并运行mediawiki是一件很麻烦的事情,在这里,我尽量用通俗易懂的语言,介绍mw(mediawi ...
随机推荐
- convert时间格式转换参数表
本文摘自:http://blog.csdn.net/zc19820620/article/details/2043829 CONVERT (data_type[(length)], expressio ...
- HDU 5628 Clarke and math——卷积,dp,组合
HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...
- android db 导入 手机 系统 目录 data/data/包名/databases
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha ======== 需要权限, 权限不足. 就算root之后,把这些都改成了777权限,仍 ...
- HDU.1529.Cashier Employment(差分约束 最长路SPFA)
题目链接 \(Description\) 给定一天24h 每小时需要的员工数量Ri,有n个员工,已知每个员工开始工作的时间ti(ti∈[0,23]),每个员工会连续工作8h. 问能否满足一天的需求.若 ...
- Python3学习策略
自学Python要点 [来自:http://www.cnblogs.com/shsxt/p/9138950.html] 1.找一本浅显易懂,例程比较好的教程,从头到尾看下去. 不要看很多本,专注于一本 ...
- 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
# -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/7/12 0012 20:29 import socket server = socket.socket() ...
- CF733F Drivers Dissatisfaction【链剖】【最小生成树应用】
F. Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- ParallaxNode视差节点实现远景近景的不同层次移动
Cocos2d-x有ParallaxNode视差节点,视察顾名思义,就是造成不同的移动速率的效果. 我想大家都玩过刀塔传奇,他的背景有远景和近景之分,而且你滑动屏幕的时候远景和近景是按照不同的速率移动 ...
- Spark Stage切分 源码剖析——DAGScheduler
Spark中的任务管理是很重要的内容,可以说想要理解Spark的计算流程,就必须对它的任务的切分有一定的了解.不然你就看不懂Spark UI,看不懂Spark UI就无法去做优化...因此本篇就从源码 ...
- Image Processing in Python with Pillow
Introduction A lot of applications use digital images, and with this there is usually a need to proc ...