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生成客户端和服务器端代码框架。我们有两种做法:

  1. 编写WSDL,使用wsdl2h生成头文件,再通过soapcpp2生成框架代码;
  2. 编写头文件,使用soapcpp2生成框架代码;
方法1比较通用,可方便使用其他语言开发,但是编写wsdl语法复杂;
方法2比较简单,但不能与其他语言通用。
我个人会选择第2个方法,效率第一!当然,如果已经从其他地方得到了wsdl文件,就用第1中方法。
 
wsdl2h命令说明

经常使用的一些指令如下:

  -o filename.h   将wsdl转化为filename.h头文件。

  -s         不生成STL代码

  -c         生成纯C风格的头文件,这将去除C++的一些特性

  -n  name      使用name代替默认前缀ns

  -t filename.dat  使用filename.dat代替默认的typemap.dat文件

  -zX        兼容之前的X版本

下面来说方法1:
用wsdl2h生成头文件过程如下:
使用的wsdl为:http://www.genivia.com/calc.wsdl
将 wsdl2h.exe;soapcpp2.exe;typemap.dat;calc.wsdl 拷贝到你自己的工作目录下(已经在环境变量中设置无需拷贝前三个了),将wsdl文件也保存为Calculator.wsdl,在cmd中,将目录切换到工作目录,执行 wsdl2h.exe -p calc.wsdl,将生成calc.h。
同样也可以使用命令wsdl2h -o calc.h http://www.genivia.com/calc.wsdl
生成头文件

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)的更多相关文章

  1. memcache的windows下的安装和简单使用

    原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...

  2. Windows下pry安装和配置

    Windows下pry安装和配置 pry是一个增强型的交互式命令行工具,比irb强大. 有自动完成功能,自动缩进,有颜色.有更强大的调试功能. pry 安装很简单. 在终端输入: gem instal ...

  3. Windows下虚拟机安装Mac OS X ----- VM12安装Mac OS X 10.11

    Windows下虚拟机安装Mac OS X -– VM12安装Mac OS X 10.11 随着Iphone在国内大行其道,越来越多的开发者涌入iOS开发大军 中,但都苦于没有苹果机,本文即将介绍WI ...

  4. Windows下memcache安装使用

    Windows下Memcache安装 随着时间的推移,网上现在能找到的在 Windows下安装 Memcache 的文档大多已经过时.雪峰这里再简要介绍一下当下最新版的安装和配置方法. Memcach ...

  5. Windows 下如何安装配置Snort视频教程

    Windows 下如何安装配置Snort视频教程: 第一步: http://www.tudou.com/programs/view/UUbIQCng360/ 第二部: http://www.tudou ...

  6. 在windows下完美安装GitHub

    笔者最近在Windows下安装GitHub,过程中遇到不少问题.现在把安装的详细步骤分享给大家,免得大家走弯路. 笔者安装了GitHub for Windows程序,一切都运行顺利.但事情没有结束,首 ...

  7. windows下Eclipse安装Perl插件教程

    windows下Eclipse安装Perl插件教程 想用eclipse编写perl.网上看了很多资料.但EPIC插件的下载连接都失效了.无奈,只好自己动手写个教程记录一下. 准备工作: 安装好Ecli ...

  8. Ruby入门--Linux/Windows下的安装、代码开发及Rails实战

    Ruby入门--Linux/Windows下的安装.代码开发及Rails实战 http://www.linuxidc.com/Linux/2014-04/100242.htm Ubuntu 13.04 ...

  9. mediawiki在windows下的安装

    mediawiki在windows下的安装 对于刚接触wiki的朋友们来说,配置一个服务器环境,安装并运行mediawiki是一件很麻烦的事情,在这里,我尽量用通俗易懂的语言,介绍mw(mediawi ...

随机推荐

  1. C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable

    经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代码及来源见最后(其中一份是VB语言的) 其中遇到的一些问题也已经得到了解决(分页,打印预 ...

  2. [BZOJ2650]积木

    [BZOJ2650]积木 题目大意: 有一排\(n\)个积木,第\(i\)个积木的高度为\(h_i\),定义混乱值为相邻两个积木高度之差的绝对值之和乘上系数\(c\).可以花费\(t^2\)的代价将一 ...

  3. SpringMVC页面传值

    public ModelAndView query(){ ModelAndView modelAndView = new ModelAndView(); List list = new ArrayLi ...

  4. 重写alert方法,去掉地址显示

    //重写alert方法,去掉地址显示window.alert = function(name){ var iframe = document.createElement("IFRAME&qu ...

  5. @property使用

    # coding:utf-8 """ property:负责把方法变成属性 """ class Student(object): def g ...

  6. vs2008快捷键

    Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL  ...

  7. [Android Pro] so 动态加载—解决sdk过大问题

    原文地址: https://blog.csdn.net/Rong_L/article/details/75212472 前言 相信Android 开发中大家或多或少都会集成一些第三方sdk, 而其中难 ...

  8. JavaScript 空间分析库——JSTS和Turf【转】

    https://blog.csdn.net/neimeng0/article/details/80363468 前言 项目中有管线的空间拓扑关系查询需求,在npm中检索到JSTS和Turf两个Java ...

  9. EasyUI使用技巧总结

    combobox组件 一.禁用combobox里面的输入框 $("选择器").combo('textbox').attr("readonly", "r ...

  10. centos7 使用rsync 实现文件同步

    一.服务端(192.168.8.81): 安装软件: yum -y install rsync 创建需同步的目录: mkdir -p /home/root/rsync 编辑配置文件:vim /etc/ ...