Onvif

 

Onvif

  开始接触onvif协议,说真的很迷茫,对什么是onvif都不知道,后来慢慢接触,说它什么什么比较好呢,就是它表面的意思,开放网络视频接口,学习它我们要知道什么是WSDLSOAPwebservice。其实网上很都资料都很好的,它官网也有很多资料,唯一讨厌的是都是英文的,对英文犯困的我是多么痛苦的事情,于是我找了些中文资料,知道了gsoap工具,下面我就总结下这些知识。

1.   soap

SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

1Envelope 元素,标识XML 文档一条 SOAP 消息

2Header 元素,包含头部信息的XML标签

3Body 元素,包含所有的调用和响应的主体信息的标签

4Fault 元素,错误信息标签。

2.   WSDL(Web services 描述语言)

Web服务定义语言(Web Services Definition Language,WSDL)是一个建议性标准,用于描述Web服务的技术调用语法。WSDL定义了一套基于 XML的语法,将Web服务描述为能够进行消息交换的服务访问点的集合,从而满足了这种需求。WSDL服务定义为分布式系统提供了可机器识别的SDK文档,并且可用于描述自动执行应用程序通信中所涉及的细节。WSDL的当前版本是1.1,规范可以从http://www.w3.org/TR/wsdl获得。

 

  WSDL就是描述XMLWeb服务的标准XML格式,WSDLAribaIntelIBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBACOM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。

 

  WSDL服务描述是一个XML文档,它与WSDL模式(schema)的定义一致。WSDL文档并不是完整的服务描述,而只包括了服务描述任务的较低层次,即:服务接口的原始技术描述。WSDLWeb服务的接口定义语言IDLInterface Definition Language,),本质上,WSDL描述说明的是Web服务的以下三个基本属性:

 

  服务做些什么--服务所提供的操作(方法)

  如何访问服务--数据格式详情以及访问服务操作的必要协议。

  服务位于何处--由特定协议决定的网络地址,如URL

二、WSDL文档结构

·     WSDL信息模型充分利用了抽象规范与规范具体实现的分离方法,也就是分离了服务接口定义(抽象接口)与服务实现定义(具体端点)

·      抽象接口规范描述了终端的处理能力,它在WSDL中表示为portType

·     束定机制 (binding mechanism)WSDL中表示为binding元素,它使用特定的通信协议、数据编码模型和底层通信协议,将Web服务的抽象定义映射至特定实现。

·     若束定结合了实现的访问地址,抽象端点也就成为可供服务请求者调用的具体端点(concrete endpoint)WSDLport元素表示了这一结合。

·     抽象接口可以支持任何数量的操作(operations)

·     操作是由一组消息(messages)定义,消息定义了操作的交互定式。

·     与抽象的消息、操作概念相对应的具体实现是由binding元素指定。

XML应用相同,WSDL模式定义了几个高层元素,或称为主要元素。在WSDL中,Web服务描述中的主要元素如下:

1.     Types,定义了Web服务使用的所有数据类型集合,可被元素的各消息部件所引用。它使用某种类型系统(一般地使用XMLSchema中的类型系统)

2.     Message,通信消息数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

3.     Operation,对服务中所支持操作的抽象描述。一般单个Operation描述了一个访问入口的请求/响应消息对。

4.     PortType,对于某个访问入口点类型所支持操作的抽象集合。这些操作可以由一个或多个服务访问点来支持。

5.     Binding,包含了如何将抽象接口的元素(portType)转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合;特定端口类型的具体协议和数据格式规范的绑定。

6.     Port,定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

7.     Service,这是一个粗糙命名的元素,代表端口的集合;相关服务访问点的集合。

 因此,portType(messagetype元素的细节相结合)描述了Web服务是什么,binding元素描述了如何使用Web服务,portservice元素描述了Web服务的位置。

  WSDL信息模型,它清楚反映了portType元素包含的抽象消息/操作和binding元素的具体消息/操作间的关系。图中的黑体字突出了WSDL规范中的术语。WSDL使用的元素名称有些含糊,由于不存在能够区分抽象和具体概念的一致命名原则,因此必须记住哪一个元素代表抽象概念,哪一个元素代表具体的概念。

2WSDL对象结构图

 一个WSDL文档中可以包含一个Types,多个MessagePortTypeBindingService

  其中,Types是一个数据类型定义的容器,包含了所有在消息定义中需要的XML元素的类型定义。

 

  Message具体定义了在通信中使用的消息的数据结构,Message元素包含了一组Part元素,每个Part元素都是最终消息的一个组成部分,每个Part都会引用一个DataType来表示它的结构。Part元素不支持嵌套(可以使用DataType来完成这方面的需要),都是并列出现。

 

  PortType具体定义了一种服务访问入口的类型(传入/传出消息的模式及其格式),一个PortType可以包含若干个Operation,而一个Operation则是指访问入口支持的一种类型的调用。在WSDL里面支持四种访问入口调用的模式:1) 单请求; 2) 单响应; 3) 请求/响应; 4) 响应/请求。在这里请求指的是从客户端到Web服务端,而响应指的是从Web服务端到客户端。PortType的定义中会引用消息定义部分的一个到两个消息,作为请求或响应消息的格式。

 

  Service描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往会包含多个服务访问入口,而每个访问入口都会使用一个Port元素来描述。


  Port描述的是一个服务访问入口的部署细节,包括通过哪个Web地址(URL)来访问,应当使用怎样的消息调用模式来访问等。其中消息调用模式则是使用Binding结构来表示。


  Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定,从这一层次开始,描述的内容就与具体服务的部署相关了。比如可以将PortTypeSOAP/HTTP绑定,也可以将PortTypeMIME/SMTP相绑定等。

  3WSDL文档类型

  WSDL文档被分为两种类型:服务接口(service interface )和服务实现(service implementations)。

  服务接口由 WSDL文档来描述,这种文档包含服务接口的 typesimportmessageportType binding 等元素。服务接口包含将用于实现一个或多个服务的 WSDL服务定义。它是 Web 服务的抽象定义,并被用于描述某种特定类型的服务。

 

  通过使用一个 import 元素,一个服务接口文档可以引用另一个服务接口文档。例如,一个仅包含 message portType 元素的服务接口可以被另一个仅包含此 portType 的绑定的服务接口引用。

 

  WSDL服务实现文档将包含 import service 元素。服务实现文档包含实现一个服务接口的服务的描述。import 元素中至少会有一个将包含对 WSDL服务接口文档的引用。一个服务实现文档可以包含对多个服务接口文档的引用。

 

  WSDL服务实现文档中的 import 元素包含两个属性。namespace 的属性值是一个与服务接口文档中的 targetNamespace 相匹配的URLlocation 属性是一个用于引用包含完整的服务接口定义的 WSDL文档的 URLport 元素的 binding 属性包含对服务接口文档中的某个特定绑定的引用。

 

  服务接口文档由服务接口提供者开发和发布。服务实现文档由服务提供者创建和发布。服务接口提供者与服务提供者这两个角色在逻辑上是分离的,但他们可以是同一个商业实体。

 

  一个完整的 WSDL服务描述是由一个服务接口和一个服务实现文档组成的。

 三、WSDL扩展机制

  WSDL设计继承了以XML为基础的当代Web技术标准的开放设计理念。它允许通过扩展使用其它的类型定义语言(不光是XMI Schema),允许使用多种网络传输协议和消息格式(不仅是在规范中定义的SOAP/HTTPHTTP-GET/POSTMIME)WSDL也应用了当代软件工程中的复用理念,分离了抽象定义层和具体部署层,使得抽象定义层的复用性大大增加。

  1 SOAP绑定

  WSDL包括用于SOAP 1.1终端的绑定,此绑定支持下列协议信息规范:


  需要指示出此绑定是针对SOAP 1.1协议的。

  为SOAP 终端指定地址的方式。

  用于SOAPAction HTTP头的URI,而此头是绑定了SOAP HTTP头。

  作为SOAP封装一部分传送的头列表定义。

  SOAP绑定使用下列扩展元素对WSDL进行扩展:(注意黑体标注)

  1soap:binding

 

  SOAP绑定元素的目的是指出绑定是针对SOAP协议格式的:Envelope, Header Body。这个元素没有对编码或消息格式进行声明。在使用SOAP绑定时必须指出soap:binding元素。

  2soap:operation

 

  soap:operation 元素从整体上为操作提供信息。


  style属性指出操作是面向RPC(消息包含参数和返回值)的还是面向文档的(消息包含文档)。此信息可用于选择合适的编程模板。此属性的值将影响SOAP消息体的构建方式,如果没有指定值,它默认为soap:binding元素中指定的值。如果soap:binding元素没有指定样式,它假定为"文档"

 

  soapAction属性为此操作的SOAPAction头指定了值。此URI应当被直接用作SOAPAction头的值,在作出请求时不要试图将一个相对URI变成绝对URI。对于绑定了SOAPHTTP协议来说,此值是必需的(它没有默认值)。对于其它的SOAP协议绑定,决对不能为其指定值,而soap:operation元素可以被忽略。

  3soap:body


  soap:body元素指出了消息部分应如何在SOAP Body元素中表现。

 

  消息的各个部分可以是抽象的类型定义,也可以是具体的模式定义。如果是抽象定义,根据编码格式定义的一套规则将对类型进行序列化。使用URI列表可以对每种编码格式进行标识,就象在SOAP规范中的那样。由于某些编码格式如SOAP编码允许某种给定的抽象类型的消息格式发生变化,那么读者应理解所有的格式变化:"读者决定正确性"。为了避免对所有变化不必要的支持,可以对消息的定义具体化,然后暗示它的原始编码格式(如果存在)。在这种情况下,消息的创建者必须严格遵循特定的规范:"作者决定正确性"

 

  soap:body提供的信息用于决定如何在SOAP消息的Body元素中组合不同的消息部分。soap:body元素可以用在面向RPC的消息也可以用在面向文档的消息中,但是封装操作的格式对Body节如何构建有重要影响:

 

  如果操作格式是RPC,那么每个部分将是一个参数,或者是一个返回值,并且它们出现在body中的wrapper元素内。wrapper元素的名字与操作的名字相同,并且它的名称空间是namespace属性的值。每个消息部分(参数)在封装器下出现,它是由与调用中相应参数名称相同的存储器表示的。各部分以与调用参数相同的顺序进行排列。


  如果操作格式是文档,那么就没有额外的封装器(wrappers),消息的parts直接出现在SOAP Body元素中。

 

  在定义Body的内容和参数存储器元素时使用了相同的机制。

  4soap:header

 

  soap:header元素允许在SOAP封装的头元素中对将要传送的头进行定义。它模拟了soap:body元素。并不需要使用soap:header费力地列出出现在SOAP封装中的所有头元素。例如,对WSDL的扩展暗示特定的头应加入到实际的有效负荷中,此时就不需要列出所有的头。

  5soap:fault


  soap:fault元素指出了SOAP Fault Details元素的内容,它模仿了soap:body元素。

  6soap:address


  SOAP地址绑定用于为端口指定地址。使用SOAP绑定的端口必须指定一个确切的地址,为地址指定的URI配制必须与soap:binding指定的传输相对应。

  2 HTTP GET POST 绑定

  为了描述Web浏览器与网站间的交互作用,WSDL包含了HTTP 1.1 GET POST版本的绑定。这种绑定允许应用程序而不浏览器与网站进行交互。可以指定下面的协议特定信息:

 

  使用了HTTP GET POST绑定的标记

  端口地址

  每种操作的相对地址(相对于端口定义的基地址)

  HTTP GET/POST绑定使用下列元素扩展WSDL:(注意黑体标注)

  1http:binding

 

  http:binding元素指出此绑定使用了HTTP协议。必需的Verb属性的值指出了HTTP的版本,其值通常是GETPOST,但也可以使用其它值。注意,HTTP版本是大小写敏感的。

  2http:operation

 

  Location属性为操作指定一个相对URI,此URIhttp:address元素指定的URI结合在一起形成了HTTP请求的完整路径。此URI必须是一个相对的URI

  3http:address

 

  location属性为端口指定了基地址。其值是与http:operation绑定元素的位置(location)属性的值结合在一起的。

  4http:urlEncoded

 

  UrlEncoded元素指出所有的消息part都按照标准的URI编码规则(名字=)编码进HTTP请求URI中。参数名与消息part的名相对应。使用"名字="对对part提供的值进行编码。通常使用GET指示URL编码,或使用POST指示一个FORM-POST。对于GET,字符""作为必需,将自动追加。

 

  <http:urlEncoded/

  5http:urlReplacement

 

  http:urlReplacement元素指出所有的消息part都使用替代运算法则被编码进HTTP请求URI中:

  http:operation 的相对URI值用于搜索一组探索方案。

  在http:operation的值与http:address的位置属性的值结合前开始搜索。

  每个消息part有一个搜索方式。搜索方式字符串是附加了""""的消息part 的名字。对每个匹配,相应消息part的值在匹配处替代匹配。

  匹配检查在任何值被替代前执行(已经替代的值不会引发另外的匹配检查)。

  消息part不能有重复值。

  <http:urlReplacement/

用于为各部分指定具体的MIME类型。如果在一个mime:part元素中出现多个MIME元素,那么它们是可相互替换的。

  5soap:body

 

  当SOAP请求使用MIME绑定时,将元素soap:body作为MIME元素使用是合法的。这指出内容的类型是"text/XML",并且存在SOAP封装。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值