Onvif协议1:gSOAP是什么

目录

1.简介

2. Web Services

2.1 Web Services常用的几种框架

3. SOAP简介

3.1如此理解SOAP

4. WSDL文档

5. gsoap编译

5.1 gSOAP工具转换原理


1.简介

gSOAP工具基于编译器技术为C/C++提供自动的SOAP和XML数据绑定。该工具使用自动生成代码以及先进的映射方法,简化了基于C/C++的SOAP/XML Web service和XML应用程序的开发。

gSOAP使用编译器技术为用户隐藏了WSDL、SOAP、特定XML的实现细节,同时自动提供XML有效性验证、内存管理和类型安全序列化,从而提供透明的解决方案。gSOAP工具可将原有的数据类型和用户自定义的数据类型映射成等价的XML数据类型,反之亦然。因此,通过一个简单的API得到了完美的SOAP互操作性,从而可使用用户从WSDL/SOAP/XML的细节中解脱出来,集中精力处理应用程序逻辑。

gSOAP工具支持传统的C/C++代码(以及留有C接口的其他编程语言)、嵌入式系统、那些和其他SOAP程序共享计算资源和信息的实时SOAP/XML应用程序之间的集成,可以跨平台,适用不同的语言环境和穿透防火墙。

gSOAP工具常常使用C/C++实现XML数据绑定。这意味着程序本地数据结构可被自动地用XML编码,而不需要额外去编写转换代码。该工具还为了XML数据绑定生成XML模式,所以外部程序可以基于该模式使用XML数据。 

下面分别介绍一下: soap, web service, wsdl

2. Web Services

Web Services是一种远程调用(Remote Procedure Call,简称RPC),WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。

Web Services能够让各个系统之间的对接变得:快捷、方便、廉价。

为什么要使用Web Service?答案是,跨平台调用,跨语言调用,远程调用。

2.1 Web Services常用的几种框架

实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等。这些看不懂,没关系,大家知道一个事情即可:实现Web Services的方式有好几种,

我们的主角ONVIF标准中的Web Service采用的是SOAP方式,接下来我们来了解下SOAP

3. SOAP简介

在TCP/IP四层模型中展示SOAP

SOAP(Simple Object Access Protocol,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。

3.1如此理解SOAP

SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的。

SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。

SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。

4. WSDL文档

WSDL 指网络服务描述语言 (Web Services Description Language)WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

WSDL 文档仅仅是一个简单的 XML 文档。它包含一系列描述某个 web service 的定义。注意:只有SOAP方式实现的Web Services才有WSDL文档,其他方式实现的Web Services并没有WSDL文档。

像动态库的.h文件一样。每个Web Services都有对应的WSDL文档。

如果将WSDL语言转化成C语言,它看起来应该是这样子:

再来看一例,获取海康球机的设备信息:WSDL定义和抓包显示

报文显示:

我们可以看看完整的WSDL文档长什么样子的:

天气预报WEB服务的接口说明(WSDL文档)

手机号归属地查询WEB服务的接口说明(WSDL文档)

ONVIF标准的WEB服务的接口说明(WSDL文档)

5. gsoap编译

下载gsoap,本文gsoap_2.8.132.zip为例,ubuntu平台执行2步:configure, make.

The ./configure command takes the following configuration options:

  • --enable-samples also builds the examples
  • --enable-ipv6 builds the library with IPv6 support (with compiler option -DWITH_IPV6)
  • --enable-ipv6-v6only builds the library with IPv6 support without remapping IPv4 to IPv6 (with compiler option -DWITH_IPV6_V6ONLY)
  • --disable-ssl removes all dependences on OpenSSL, GNUTLS and WolfSSL from the tools and libraries
  • --enable-gnutls replaces the dependence on OpenSSL by GNUTLS (with compiler option -DWITH_GNUTLS)
  • --enable-wolfssl replaces the dependence on OpenSSL by WolfSSL (with compiler option -DWITH_WOLFSSL)
  • --enable-debug builds the software (with compiler option -DDEBUG) to produce audit logs (slow, not recommended for production)
  • --disable-namespaces removes global namespaces table linkage requirement (recommended for experts only)
  • --disable-c-locale removes the C locale and locale_t type that is internally used to override the local locale (the C locale is needed for proper use of decimal point in float values)
  • --enable-xlocale forces the inclusion of xlocale.h to define the locale_t type, which is useful if the build fails due to an undefined locale_t type
  • --with-openssl=DIR specifies the OpenSSL installation directory
  • --with-zlib=DIR specifies the Zlib installation directory

成功编译之后,生成2个工具,用于后续使用。

  • gsoap/bin/wsdl2h translator of WSDL/XSD to services and XML data bindings (interface tool)
  • gsoap/bin/soapcpp2 code generator for services and XML data bindings (implementation tool)

5.1 gSOAP工具转换原理

gSOAP工具根据WSDL文档,自动生成C/C++语言的客户端/服务端框架代码。这其中有两个工具很重要,wsdl2h和soapcpp2。wsdl2h工具根据WSDL文成C/C++头文件,而soapcpp2工具则是根据该头文件生成C/C++的框架源码。

gSOAP工具可以在Windows、Linux和Macosx操作系统下运行,gSOAP工具包中自带有Windows和Macosx操作系统的wsdl2h和soapcpp2可执行文件,而Linux操作系统的,得自己编译。通过实验证实,用Windows和Linux工具生成的框架代码,是一样样的,没有区别。

gSOAP到底会自动生成哪些框架代码,下图中浅绿色框中的部分就是自动生成的代码。


下个专题,讲一下gsoap生成代码的用例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/345736.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot118共享汽车管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的共享汽车管理系统 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获…

如何在Linux上部署Docker容器

一、什么是docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不…

Vue+Element(el-upload+el-form的使用)+springboot

目录 1、编写模板 2、发请求调接口 3、后端返回数据 1.编写实体类 2.Controller类 3、interface接口(Service层接口) 4.Service(接口实现) 5、interface接口(Mapper层接口) 6、xml 4、upload相关参…

别不信❗️你离数据专家只差一个CDMP证书

1⃣️为什么选择CDMP证书? 🌟🌟亲爱的朋友们,如果你在寻找一个能让你在数据管理领域大展拳脚的证书,那么CDMP(Certified Data Management Professional)证书就是你的不二之选!&#…

【数据结构】链表的分类和双向链表

本篇是基于上篇单链表所作,推荐与上篇配合阅读,效果更加 http://t.csdnimg.cn/UhXEj 1.链表的分类 链表的结构非常多样,以下情况组合起来就有8种(2 x 2 x 2)链表结构: 我们一般叫这个头为哨兵位 我们上回…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#…

搭建《幻兽帕鲁》服务器需要怎样配置的云服务器?

随着《幻兽帕鲁》这款游戏的日益流行,越来越多的玩家希望能够在自己的服务器上体验这款游戏。然而,搭建一个稳定、高效的游戏服务器需要仔细的规划和配置。本文将分享搭建《幻兽帕鲁》服务器所需的配置及搭建步骤,助力大家获得更加畅快的游戏…

【教学类-综合练习-09】20240105 大4班 综合材料(美术类:骰子、面具、AB手环)

背景需求 年终了,清理库存,各种打印的题型纸都拿出来,当个别化学习材料 教学过程: 时间:2024年1月2日下午 班级:大4班 人数:16人

微博处罚造谣账号只是”罚酒三杯“?

1月11日,一则#近视眼从800度降到100度的过程#话题登上微博热搜榜第一位。有博主称通过“视觉恢复的闪现技巧”可逐渐恢复视力。在9个小时时间内,该话题达到2.4亿阅读量,6.2万讨论量。 不过,遗憾的是,相关内容实际上是伪…

np.bincount函数的用法

官网写的非常清晰了, 返回数组的数量比x中的最大值大1,它给出了每个索引值在x中出现的次数。下面,我举个例子让大家更好的理解一下: np.bincount(np.array([0, 1, 1, 3, 2, 1, 7])) array([1, 3, 1, 1, 0, 0, 0, 1])最大值是7&a…

SQL提示与索引终章

✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL-进阶篇 📜 感谢大家的关注! ❤️ 可以关注黑马IT,进行学习 目录 🚀SQL提示 🚀覆盖索引 🚀前缀索引 &…

Modelsim10.4安装

简介(了解,可跳过) modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速…

基于springboot+vue的墙绘产品展示交易平台系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

MySQL建表练习

练习题目:通过所提供的E-R图和数据库模型图完成库表的创建,并插入适量的数据.要求必须使用SQL命令进行构建。 已知如下: 1、创建客户信息表: 代码: CREATE DATABASE Bank; //建库CREATE TABLE Userinfo(Cust…

aop介绍

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用…

ORBSLAM3安装

0. C11 or C0x Compiler sudo apt-get install gccsudo apt-get install gsudo apt-get install build-essentialsudo apt-get install cmake1. 依赖 在该目录终端。 1. 1.Pangolin git clone https://github.com/stevenlovegrove/Pangolin.git sudo apt install libglew-d…

Elasticsearch中的数值类型索引

Elasticsearch中的数值类型索引 | 你来啦 👩🏻‍💻 前言 最近杂七杂八的事情比较多,好久没更新文章了🤦‍♀️,今天就好好来理一理之前没搞清楚的关于ES数值索引的问题。ES主要是用于解决文本检索的场景,ES会默认将所有的输入内容当作字符串来理解,对于字段类型是…

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)

摘要:本文介绍了使用Java编程语言计算任意整数n及其之前所有整数的和的示例代码。代码使用了Scanner类来读取用户输入的整数值,并通过循环计算出和结果并生成计算公式字符串。 内容: 在这个示例中,我们将展示如何使用Java编程语言…

《二叉树》——2

目录 前言: 树的节点个数: 树的叶子节点个数: 树的高度: 树的第K层节点个数: 二叉树查找值为x的节点: 二叉树的销毁: 总结: 前言: 我们在之前的blog中对于前中后的遍历有了深层次…