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 ...
随机推荐
- C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable
经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代码及来源见最后(其中一份是VB语言的) 其中遇到的一些问题也已经得到了解决(分页,打印预 ...
- [BZOJ2650]积木
[BZOJ2650]积木 题目大意: 有一排\(n\)个积木,第\(i\)个积木的高度为\(h_i\),定义混乱值为相邻两个积木高度之差的绝对值之和乘上系数\(c\).可以花费\(t^2\)的代价将一 ...
- SpringMVC页面传值
public ModelAndView query(){ ModelAndView modelAndView = new ModelAndView(); List list = new ArrayLi ...
- 重写alert方法,去掉地址显示
//重写alert方法,去掉地址显示window.alert = function(name){ var iframe = document.createElement("IFRAME&qu ...
- @property使用
# coding:utf-8 """ property:负责把方法变成属性 """ class Student(object): def g ...
- vs2008快捷键
Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL ...
- [Android Pro] so 动态加载—解决sdk过大问题
原文地址: https://blog.csdn.net/Rong_L/article/details/75212472 前言 相信Android 开发中大家或多或少都会集成一些第三方sdk, 而其中难 ...
- JavaScript 空间分析库——JSTS和Turf【转】
https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...
- EasyUI使用技巧总结
combobox组件 一.禁用combobox里面的输入框 $("选择器").combo('textbox').attr("readonly", "r ...
- centos7 使用rsync 实现文件同步
一.服务端(192.168.8.81): 安装软件: yum -y install rsync 创建需同步的目录: mkdir -p /home/root/rsync 编辑配置文件:vim /etc/ ...