Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,
从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。
用gsoap开发web service的大致思路

我们开发webservice应用,大致有两个方向:

1.  API接口固定,不关心底层的通讯,将SOAP作为应用层协议

此时,我们先定义接口,编写好.h文件,运行soapcpp2生成出相应的代码,对服务器端,修改XXXService文件,实现业务逻辑,对客户端,修改XXXProxy文件,实现业务逻辑。

2.  通讯协议固定(当然需要基于XML的)或只有wsdl,将SOAP作为“传输层”协议

此时,我们必须根据通讯协议或wsdl生成相应的C/C++类型的.h文件,如果需要我们自己编写wsdl,则需要一点其相关知识,不过我们可以用C#等生成一个简单的wsdl,照猫画虎即可。运用wsdl2h,我们可以生成.h文件,有了.h后,按上面的步骤继续。
(注意:有时通过wsdl2 *.wsdl 命令生成的*.h头文件会默认包含stlvector.h,所以编译包里必须包含这个文件才能用soap2 *.h 命令编译生成文件)


一、根据WSDL文件开发WebService客户端,访问Java的WebService服务端

1. Java 定义好WebService接口,生成WSDL标准接口文件。


2. 使用GSoap的WSDL2h.exe工具把WSDL文件生成C++的头文件。
    wsdl2h  XXX.wsdl 命令会生成 XXX.h

3. 使用GSoap的 soapcpp2.exe工具把XXX.h头文件生成Soap封装的类。
    soapcpp2 -C -p XXX -j  XXX.h
    -C为生成客户端代码,会生成以Proxy结尾的类, 
    -S为生成服务端代码,会生成以Service结尾的类。


WSDL标准接口文件的解析说明可参考WSDL相关资料。

注意:根据WSDL文件生成的客户端的接口返回值也是是int类型,返回结果被GSoap封装为接口的引用参数了。


一、根据.h头文件开发C++的WebService服务端,Java用客户端访问

1.定义APi接口函数

如:calc.h文件接口编写
//calculater
//gsoap api service name:  calc

//gsoap api service style:
rpc
//gsoap api service encoding:
encoded
//gsoap api service location:
http://localhost:10086/
//gsoap api service namespace:
http://basecode.soapapp
//gsoap api schema namespace:
http://basecode.soapapp/message

typedef char*
xsd__string;
typedef int     xsd__int;

//加法接口
int api__add
(
xsd__int num1,
xsd__int num2,
xsd__string desc,
xsd__int & result
);

2.直接用build.bat脚本编译成功后便会生成WS请求的WSDL接口文件。
使用soapcpp2命令编译:
soapcpp2 -S -p calc -j calc.h  生产服务端代码

3.编写类继承生成的接口类就可以实现其功能,
或者把用全局函数ns__add(int num1,int num2,string desc, int result)实现接口功能。

4.包含文件:头文件,命名空间文件,soap组件文件
#include "soap/calcH.h"
#include "soap/calc.nsmap"
#include "soap/stdsoap2.h"

5.问题:其自定义生成接口在生成类中没有添加实现,编译报链接错误?
生成类源文件中实现自定义的接口函数,放空,编译通过。

6.测试:使用SoapUi工具建立工程,加载到WSDl文件,其端口号要与监听的端口一致。


注意:服务端的接口返回值必须是int类型,如果需要返回结果其它信息需要使用引用参数,
引用参数可以是基础类型,或者自己封装的结构体类型。

使用GSoap开发WebService客户端与服务端的更多相关文章

  1. 使用Axis2编写webservice客户端,服务端

    1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...

  2. CXF创建webservice客户端和服务端

    转 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.C ...

  3. Axis创建webservice客户端和服务端

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...

  4. 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...

  5. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发

    目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...

  6. 二、网络编程-socket之TCP协议开发客户端和服务端通信

    知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...

  7. WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)

    还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...

  8. python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何 ...

  9. windows下vs2012用gsoap开发webservice实例

    零:说明 1.本文是根据网上前人经验结合自己动手操作写成,开发工具用的vs2012,gsoap用的是gsoap-2.8: 2.gsoap提供的工具简单介绍 1)wsdl2h.exe:根据WSDL文件生 ...

随机推荐

  1. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  2. PHP — php精粹-编写高效的php代码 --- API

    1.数据格式 (1)json 示例代码: $jsonData = '[{"title":"The Magic Flute","time":1 ...

  3. 已经安装php后,再增加扩展模块(不重新编辑php)

    下面以安装curl为例,介绍具体安装步骤. 1.安装crul wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7 ...

  4. 在ECSHOP首页今日特价(促销商品)增加倒计时效果

    看到不少朋友在找首页特价商品倒计时的修改方法,写了这篇文章希望能帮到有此需要的朋友们 1.首先修改程序部分 打开includes/lib_goods.php 找到get_promote_goods() ...

  5. Consistent Hashing原理与实现

    原理介绍: consistent hashing原理介绍来自博客:http://blog.csdn.net/sparkliang/article/details/5279393, 多谢博主的分享 co ...

  6. Xcode:只修改 Bundle Identifier,不修改项目名

    找到 xx-Info.plist,打开 直接去修改 Bundle identifier 即可(默认后缀是项目名字).

  7. Python的数据类型总结

    原地可变类型和不可变类型 原地不可变类型又叫可哈希(hashable)类型,原地可变类型又叫不可哈希类型. 原地不可变类型: 数字类型:int, float, decimal.Decimal, fra ...

  8. 第 6 章 抽象工厂模式【Abstract Factory Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 好了,我们继续上一节课,上一节讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都 是清一色的类型,缺少关爱.仇恨 ...

  9. nojs iis asp.net mvc

    http://blogs.msdn.com/b/scott_hanselman/archive/2011/11/29/window-iis-node-js.aspx http://www.hansel ...

  10. SaltStack的salt-api里如何指定用户执行cmd.script

    在杨威的协助下,命令行,API调用都完美搞定. 主要是RUNAS参数的位置,以及它作为CURL POST -D DATA的使用. salt '1.2.3.4' cmd.script "sal ...