使用Gsoap创建webservice(c++)

使用Gsoap创建WebService

(c++)

1.         下载编译Gsoap

gSOAP工具包是用于SOAP和REST XML Web服务以及通用C / C ++ XML数据绑定的C和C ++软件开发工具包。 该工具包分析WSDL和XML模式(单独或作为组合集),并将XML模式类型和SOAP / REST XML消息传递协议映射为易于使用且高效的C和C ++代码。 它还支持通过自动生成XML序列化代码和WSDL规范将(传统)C和C ++应用程序作为XML Web服务公开。

下载Gsoap2.8:Gsoap下载地址:https://sourceforge.net/projects/gsoap2/files

解压,编译,安装后,

解压目录/gsoap/目录下,找到stdsoap2.c,stdsoap2.cpp,stdsoap2.h三个文件,后续需要引入。

2.         编写webservice所需头文件

2.1 编写imageRg.h文件,实例如下:(标注区域都需要根据实际情况替换)

//gsoap ns service name: imageRg

//gsoap ns service namespace: http://localhost/imageRg.wsdl

//gsoap ns service location: http://localhost

//gsoap ns service executable: imageRg.cgi

//gsoap ns service encoding: encoded

//gsoap ns schema namespace: urn:imageRg

int ns__getPlateID(std::string imgdata, std::string &plateID);

2.2 根据gosap工具生成源文件

Soapcpp2是一个根据.h文件生成若干支持webservice的代码生成工具,生成的代码文件包括webservice客户端和服务器的实现框架,XML数据绑定等,具体说明如下:


文件


描述


soapStub.h


根据输入的.h文件生成的数据定义文件,一般我们不直接引用它。


soapH.h

soapC.cpp


客户端和服务器端应包含该头文件,它包含了soapStub.h。针对soapStub.h中的数据类型,cpp文件实现了序列化、反序列化方法。


soapXYZProxy.h

soapXYZProxy.cpp


这两个文件用于客户端,是客户端调用webservice的框架文件,我们的代码主要在此实现或从它继承。


soapXYZService.h

soapXYZService.cpp


这两个文件用于服务器端,是服务器端实现webservice的框架文件,我们的代码主要在此实现或从它继承。


.xsd


传输消息的schema,,我们可以看看是否满足我们的协议格式(如果有此要求)


.wsdl


这个就不用说了。


.xml


满足webservice定义的例子message,即实际的传输消息,我们可以看看是否满足我们的协议格式(如果有此要求)。


.nsmap


命名空间的定义,对命名空间不敏感的,不用关注。

使用soapcpp2时,可选项如下:


选项


描述


-1


Soap1.1绑定


-2


SOAP1.2绑定


-C


只生成客户端代码


-S


只生成服务器端代码


-T


生成自动测试代码


-L


不生成 soapClientLib/soapServerLib


-a


用 SOAPAction 和WS-Addressing调用服务器端方法


-A


用 SOAPAction 调用服务器端方法


-b


采用char[N]这样的方式来表示string


-c


生成的是C代码,不是C++代码


-d < path >


将代码生成在 < path >下


-e


生成 SOAP RPC 样式的绑定


-f N


File split of N XML serializer implementations per file


-h


显示一个简要的用法信息


-i


生成的服务代理类和对象从struct soap继承而来


-j


生成的服务代理类和对象包含struct soap而来(C代码的唯一选择)


-I < path >


包含其他文件时使用,指明 < path > (多个的话,用`:‘分割),相当于#import ,该路径一般是gSOAP目录下的import目录,该目录下有一堆文件供soapcpp2生成代码时使用。


-n


用于生成支持多个客户端和服务器端(具体内容参考gSOAP文档)


-p < name >


生成的文件前缀采用< name > ,而不是缺省的 "soap"


-q < name >


C++代码中,所有声明的命名空间


-s


生成的代码在反序列化时,严格检查XML的有效性


-t


生成的代码在发送消息时,采用xsi:type方式


-u


在 WSDL/schema 输出文件中不产生XML注释


-v


显示版本信息


-w


不生成 WSDL 和 schema 文件


-x


不生成 XML 形式的传输消息文件


-y


在XML 形式的传输消息文件中,包含 C/C++类型信息

实例:

在头文件所在目录执行:

root@worker:/opt/workspace/gsoap_headfiles/test# soapcpp2 -S -j -T resq.h

**  The gSOAP code generator for C and C++, soapcpp2 release 2.8.70

**  Copyright (C) 2000-2018, Robert van Engelen, Genivia Inc.

**  All Rights Reserved. This product is provided "as is", without any warranty.

**  The soapcpp2 tool and its generated software are released under the GPL.

**  ----------------------------------------------------------------------------

**  A commercial use license is available from Genivia Inc., contact@genivia.com

**  ----------------------------------------------------------------------------

Saving soapStub.h annotated copy of the source interface file

Saving soapH.h serialization functions to #include in projects

driverMonitorSoap.h(9): *WARNING*: Cannot use document style with SOAP encoding

Using ns service name: driverMonitor

Using ns service style: document

Using ns service encoding: literal

Using ns service location: http://localhost

Using ns service executable: DriverMonitor.cgi

Using ns schema namespace: resq

Saving driverMonitor.wsdl Web Service description

Saving soapdriverMonitorService.h service class

Saving soapdriverMonitorService.cpp service class

Saving driverMonitor.dataStream.req.xml sample SOAP/XML request

Saving driverMonitor.dataStream.res.xml sample SOAP/XML response

Saving driverMonitor.getAlarmType.req.xml sample SOAP/XML request

Saving driverMonitor.getAlarmType.res.xml sample SOAP/XML response

Saving driverMonitor.nsmap namespace mapping table

Saving soapTester.cpp auto-test echo server

Saving ns.xsd XML schema

Saving soapC.cpp serialization functions

Compilation successful (1 warning)

3.         添加生成的gsoap相关源码到工程目录

添加步骤2生成的源码到工程目录,项目不需要引入动态库。

工程结构:

├── CMakeLists.txt

├── CMakeLists.txt.user

├── drivermonitorhandle.cpp

├── driverMonitor.wsdl

├── include

│   ├── base64vimg.h

│   ├── data.h

│   ├── driver_monitor.h

│   ├── drivermonitorhandle.h

│   ├── driverMonitor.nsmap

│   ├── glog

│   │   ├── …

│   ├── ns.xsd

│   ├── soapH.h

│   ├── soapStub.h

│   ├── stdsoap2.h

├── lib

├── soapC.cpp

├── soapServer.cpp

├── stdsoap2.cpp

最后添加请求处理逻辑到工程中。

原文地址:https://www.cnblogs.com/apache11/p/10600024.html

时间: 2024-07-29 22:47:11

使用Gsoap创建webservice(c++)的相关文章

纯c gSoap实现WebService

一.系统环境linux操作系统kernel2.4.2,安装gsoap2.6到目录/usr/local/gsoap二.gSOAP的简要使用例子下面是一个简单的例子,实现一个加法运算的WebService,具体功能是cli端输入num1和num2,server端返回一个num1和num2相加的结果sum. 1. 首先,我们需要做的是写一个函数声明文件,来定义接口函数ns__add,文件名字为add.h,内容如下: //gsoap ns service name: add//gsoap ns serv

gsoap开发webservice

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库.与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来. gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构

使用axis2创建webservice

这个方式创建的webservice可以和web项目放到同一个工程下. 创建webservice服务,所需要的jar包如下: axiom-api-1.2.8.jar axiom-impl-1.2.8.jar axis-0.1.jar axis2-adb-1.5.jar axis2-kernel-1.5.jar axis2-transport-http-1.5.jar axis2-transport-local-1.5.jar commons-codec-1.3.jar commons-httpcl

vs2010下创建webservice ----第一天(建立项目,以及不连数据库进行加减乘除)

Visual Studio 2010默认采用的框架为.NET Framework4,在这个框架中已找不到直接创建WebService的模板方式了.但VS2010可以创建WebService是毋庸置疑的,那么怎么在VS2010中创建WebService呢,请看下面为您提供的两种方法,方法已经本人测试,可以放心使用! 方法一:.NET Framework4.0框架下,依然可以创建WebService,步骤如下: ① 选择"ASP.NET空Web应用程序<ASP.NET Empty Web Ap

CXF创建webservice客户端和服务端

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9320053 一.CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成.CXF框架是一种基于servlet技术的SOA应用开发

使用VS2010创建WebService 发布、测试

使用VS2010创建WebService 发布.测试 (2015-03-19 18:13:13) 转载▼ 标签: web应用程序 web服务 webservice 分类: 代码天地 1 打开VS2010,菜单    文件->新建->项目 2 选择[ASP.net 空web应用程序],将其命名为自己想的工程名称. 3 右键点击工程,添加->新建项 选择 web服务.然后命名服务名称, 比如myWebSevice . 4 在asmx文件中,继续加入自己的WebService方法,其中也要改变

如何使用C#创建WebService

使用C#创建WebService,服务端的webservice是必须,中间的soap,Xml我们不用去关心.下面是使用C#创建WebService的简单介绍. AD:51CTO技术沙龙 | 赋予APP不同凡响的交互和体验>> C#学习到一定程度会涉及到C#创建WebService的一些高阶知识,本文试图对此做一个简单的介绍. 假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端Xml格式的数据. 现在我们看一看创建一个C#

XFire创建WebService实例

XFire创建WebService实例应用 XFire使得在JavaEE应用中发布Web服务变得轻而易举.和其他Web服务引擎相比, XFire的配置非常简单,可以非常容易地和Spring集成. 下载地址:http://xfire.codehaus.org/Download. 一. 使用XFire发布WebService    1. 创建service接口 package com.test.service; import com.test.service.bean.User; public in

利用JDK(1.6及以上版本)创建WebService

一.什么是WebService WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互. WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的. WebService=WSDL+SOAP+UDDI(webservice的注册) Soap是由Soap的part和0个或多个附件