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 ...
随机推荐
- flask-include标签使用标签
[footer.html] <footer> 这是底部 </footer> [header.html] <style> .nav ul{ overflow: h ...
- BZOJ.5404.party(树链剖分 bitset Hall定理)
题目链接 只有指向父节点的单向道路,所以c个人肯定在LCA处汇合.那么就成了有c条到LCA的路径,求最大的x,满足能从c条路径中各选出x个数,且它们不同. 先要维护一条路径的数的种类数,可以树剖+每条 ...
- [Astar2008]Black-Whilte-Tree
Description: 你拥有一棵有 N 个结点白色的树--所有节点都是白色的. 接下来,你需要处理 C 条指令: 1.修改指令:改变一个给定结点的颜色(白变黑,黑变白); 2.查询指令:询问从结点 ...
- maven遇到的一些问题
(1)在加载的时候pom.xml文件是和src同级的,当在pom.xml导入jar包时一定要先把jar包所在的项目mvn install否则会报找不到的错误 (2)怎么找到maven原有的仓库? 找到 ...
- Codeforces Round #410 (Div. 2) 题解 【ABCD】
A 题意:问你恰好修改一个字符,能不能使得字符串变成回文串 题解:显然直接for一遍,如果长度为偶数,那么不一样的必须是1个:如果长度为奇数,那么不一样的也可以是0个 #include<bits ...
- Delphi 中big5 转 Unicode 函数
function Big5ToUnicode(str Char): widestring; var len: integer; begin len:=MultiByteToWideChar(,,PCh ...
- Java ThreadLocal的使用
Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量.因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread ...
- 【转】JavaScript 的装载和执行
承接前面一篇文章<浏览器的渲染原理简介> ,本文来说下JavaScript的装载和执行. 通常来说,浏览器对于 JavaScript 的运行有两大特性: 1) 载入后马上执行 2) 执行时 ...
- SqlSession介绍
SqlSession是MyBatis的关键对象,是执行持久化操作的对象,类似于JDBC中的Connection.它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操 ...
- Linux使用过程中常见问题及其解决方法
“我不怕问题的出现,相反,我喜欢问题,因为我知道这是一种成长............” 1,ubuntu中文输入法的安装: 今天重装了英文版的ubuntu,而发现中文输入法并没有自动安装好,于是搜了 ...