赞
踩
WSDL,英文全称Web Services Description Language,中文全称为网络服务描述语言,是XML的一种扩展应用,用于描述网络服务及其如何被调用。在Onvif中,WSDL文件描述了网络视频设备提供的各种服务接口,包括:设备管理、媒体流处理、事件处理等。简单来说,WSDL文件就是一份“说明书”,告诉开发者如何与设备进行通信。
想象一下,你刚买了一个全新的IPC摄像头,想要让它乖乖听命于你。但设备不会说话,你也不会它的“语言”。这时候,WSDL就扮演了翻译和指导手册的角色。它是一个基于XML的语言,详细描述了网络服务接口的信息,包括:服务在哪里、如何调用、需要哪些参数、期望得到什么类型的响应等。有了WSDL,我们就能知道如何正确地与ONVIF设备进行“对话”。
WSDL文件通常分为四个主要部分,每个部分就像是构建一座桥的不同材料。
Types(类型):定义了服务中使用的数据类型,好比桥的基石。比如:定义一个字符串类型或一个日期类型,确保双方理解同一套“词汇”。
Message(消息):服务交互的基本单位,好比桥上的车辆。它定义了请求和响应消息的数据结构,告诉我们要发送哪些数据给设备,以及设备会怎样回复。
Operation(操作):一系列的服务动作,如同桥上的不同车道。比如:“GetStreamUri”操作可以让我们获取视频流的URL,“SetSystemDateAndTime”则能修改设备的系统时间。
Binding & Service(绑定和服务):绑定详细说明了服务如何实现(比如:使用HTTP还是HTTPS),而服务则提供了功能和特性的网络地址,就像告诉我们桥的入口在哪里一样。绑定和服务结合在一起,确保我们能准确无误地找到并使用服务。
在Onvif中,WSDL文件描述了网络视频设备提供的服务接口。开发者可以通过阅读WSDL文件,了解设备支持哪些操作,以及每个操作的输入和输出参数是什么。
为了便于大家理解,我们在这里给出一个简化版的WSDL文件,用于获取Onvif设备的所有服务。
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions
- xmlns:tns="http://www.onvif.org/ver10/device/wsdl"
- xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
- xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
- xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- name="DeviceService"
- targetNamespace="http://www.onvif.org/ver10/device/wsdl">
-
- <!-- 类型定义 -->
- <types>
- <!-- 这里会导入或定义ONVIF协议中使用的所有数据类型 -->
- <xsd:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="onvif.xsd"/>
- </types>
-
- <!-- 消息定义 -->
- <message name="GetServicesRequest">
- <part name="Request" element="tns:GetServices"/>
- </message>
- <message name="GetServicesResponse">
- <part name="Response" element="tns:GetServicesResponse"/>
- </message>
-
- <!-- 端口类型定义 -->
- <portType name="Device">
- <operation name="GetServices">
- <input message="tns:GetServicesRequest"/>
- <output message="tns:GetServicesResponse"/>
- </operation>
- <!-- 这里会列出Device服务支持的所有操作 -->
- </portType>
-
- <!-- 绑定定义 -->
- <binding name="DeviceBinding" type="tns:Device">
- <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
- <operation name="GetServices">
- <soap:operation soapAction="http://www.onvif.org/ver10/device/wsdl/GetServices"/>
- <input>
- <soap:body use="literal"/>
- </input>
- <output>
- <soap:body use="literal"/>
- </output>
- </operation>
- <!-- 这里会列出每个操作的SOAP绑定细节 -->
- </binding>
-
- <!-- 服务定义 -->
- <service name="DeviceService">
- <port name="DevicePort" binding="tns:DeviceBinding">
- <soap:address location="http://camera-ip/onvif/device_service"/>
- <!-- 这里指定服务的访问地址 -->
- </port>
- </service>
-
- </definitions>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreBlack.png)
在上面的WSDL文件中,我们首先声明了XML命名空间。xmlns:tns表示目标命名空间,指向ONVIF设备服务的WSDL定义。xmlns:wsa、xmlns:wsp、xmlns:wsam、xmlns:xsd、xmlns:soap、xmlns:soap12、xmlns:wsdl分别引用了其他用于定义服务的命名空间,比如:Web服务地址、策略、SOAP绑定等。
接下来,我们进行了类型的定义。这部分导入了ONVIF定义的数据类型,通过xsd:import标签引入了位于onvif.xsd的XML Schema文件,其中定义了服务交互所需的所有数据结构。
再接下来,我们进行了消息的定义。GetServicesRequest和GetServicesResponse消息分别定义了请求和响应的数据结构,为调用GetServices操作准备。
然后,我们进行了端口类型的定义。Device端口类型定义了服务可以提供的操作,比如:GetServices。每个操作定义了输入(请求)和输出(响应)消息,并明确了服务的交互模式。
紧随其后,我们进行了绑定的定义。DeviceBinding绑定了Device端口类型到SOAP协议上,指定了消息交换的风格(document)和传输协议(HTTP)。soapAction属性指定了操作的URI,帮助服务端识别请求的目的。
最后,我们定义了服务。DeviceService定义了一个具体的服务实例,名为DevicePort。它绑定了前面定义的DeviceBinding,并指定了服务的实际访问地址为:http://camera-ip/onvif/device_service,客户端可通过这个地址与服务进行交互。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。