Onvif协议1:gSOAP是什么

发布时间:2024年01月24日

目录

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生成代码的用例。

文章来源:https://blog.csdn.net/proing/article/details/135827546
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。