使用GSoap开发WebService客户端与服务端
发布时间:2020-12-17 00:04:30 所属栏目:安全 来源:网络整理
导读:Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。 用gsoap开发web service的大致思路 我们开发webservice应用,大致有两个方向: 1. ?API接口固定,不关心底层的通讯,将SOAP作为应
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服务端
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类型,如果需要返回结果其它信息需要使用引用参数,
引用参数可以是基础类型,或者自己封装的结构体类型。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Powershell: powershell获取当前目录下最新创建的
- angular2 primeNg 表格插件 排序
- [博客迁移]探索Windows Azure 监控和自动伸缩系列
- 无法将Angular从版本6降级到5
- AngularJS:强制刷新本机一次性绑定
- angularjs – orderBy dd / mm / yyyy年份角度
- Angular5 reactive Forms Listening for Changes
- 使用Scala ObservableSet Trait的示例
- Angular 2 中的 ViewChildren 和 ContentChildre
- SoapHeader 的作用是什么(转载)
热点阅读