Onvif协议1:gSOAP是什么

本文介绍了gSOAP工具,一种基于编译器技术的C/C++SOAP和XML数据绑定工具,它简化了WebServices开发过程,包括WSDL文档的使用和gSOAP编译原理。gSOAP支持多种平台和语言集成,通过自动生成代码实现无缝的SOAP服务交互。
摘要由CSDN通过智能技术生成

目录

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

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值