WSDL基础

前言:

WSDL,即Web服务描述语言(Web Services Description Language),是一种使用XML编写的文档,用于描述Web服务的接口。它定义了服务的位置、可用操作(或方法)以及使用的消息格式等信息。

下面是WSDL的一些重要特点和示例:

  • XML编写:WSDL是一种基于XML的文档,因此它的语法结构和数据格式都符合XML规范。

  • 描述网络服务:WSDL用于描述网络服务的接口,包括服务的位置、可用操作和消息格式等信息,使客户端能够理解如何与服务进行交互。

  • 定位网络服务:除了描述服务接口外,WSDL还可以用于定位网络服务。通过WSDL文档中的地址信息,客户端可以知道服务的位置,并向其发送请求。

  • 非W3C标准:尽管WSDL是一种广泛使用的标准,但它目前并不是W3C的正式标准,而是作为W3C的一个备忘录提交的。

以下是一个简单的WSDL示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<definitions name="StockService"
targetNamespace="http://example.com/stockservice"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/stockservice"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<message name="GetStockPriceRequest">
<part name="StockSymbol" type="xsd:string"/>
</message>

<message name="GetStockPriceResponse">
<part name="Price" type="xsd:float"/>
</message>

<portType name="StockPortType">
<operation name="GetStockPrice">
<input message="tns:GetStockPriceRequest"/>
<output message="tns:GetStockPriceResponse"/>
</operation>
</portType>

<binding name="StockBinding" type="tns:StockPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetStockPrice">
<soap:operation soapAction="http://example.com/stockservice/GetStockPrice"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

<service name="StockService">
<port name="StockPort" binding="tns:StockBinding">
<soap:address location="http://example.com/stockservice"/>
</port>
</service>

</definitions>
  1. definitions 元素:定义了整个 WSDL 文档的根元素。它包含了名称(name)和目标命名空间(targetNamespace)属性,以及定义了命名空间别名(xmlns)。

  2. message 元素:定义了消息的结构,分为请求消息 GetStockPriceRequest 和响应消息 GetStockPriceResponse。每个消息包含了一个部分(part),用于定义消息的数据结构和类型。

  3. portType 元素:定义了服务接口的抽象描述,即可提供的操作(operation)。在这里,只定义了一个操作 GetStockPrice,它包含了一个输入(input)消息和一个输出(output)消息。

  4. binding 元素:将端口类型(portType)与传输协议和消息格式绑定在一起。在这里,定义了一个名为 StockBinding 的绑定,使用了 SOAP 协议(soap:binding),样式为文档风格(document),传输协议为 HTTP。并且定义了一个操作 GetStockPrice,指定了 SOAP 操作(soap:operation)的动作和消息体的使用(soap:body)。

  5. service 元素:定义了具体的服务实现。在这里,定义了一个名为 StockService 的服务,包含了一个端口(port)StockPort,绑定为 StockBinding,并指定了服务的地址(location)。

这个示例描述了一个简单的股票查询服务,客户端可以通过 HTTP 协议向 http://example.com/stockservice 发送请求,调用 GetStockPrice 操作来获取股票价格。

什么东西?大概率现在看不懂,接着学下去吧,那是学完应该就可以看懂的。

WSDL 文档

WSDL 文档仅仅是一个简单的 XML 文档。

它包含一系列描述某个 web service 的定义。

  1. definitions 元素:WSDL 文档的根元素,包含了整个文档的定义和命名空间的声明。
1
2
3
4
5
6
7
8
<definitions name="StockService"
targetNamespace="http://example.com/stockservice"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/stockservice"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- 其他元素 -->
</definitions>
  1. definitions 元素
    • name 属性:指定了网络服务的名称为 "StockService",用于标识该 WSDL 文档描述的服务。
    • targetNamespace 属性:定义了命名空间,用于唯一标识该 WSDL 文档中定义的元素和类型。在这里,命名空间为 http://example.com/stockservice,表示该文档描述的是一个名为 "StockService" 的服务。
    • xmlns 属性:定义了默认命名空间,指定了该文档中元素的命名空间为 http://schemas.xmlsoap.org/wsdl/
    • xmlns:soap 属性:定义了一个名为 soap 的命名空间前缀,并将其映射到 http://schemas.xmlsoap.org/wsdl/soap/,用于引用 SOAP 协议相关的元素。
    • xmlns:tns 属性:定义了一个名为 tns 的命名空间前缀,并将其映射到 http://example.com/stockservice,用于引用本地命名空间。
    • xmlns:xsd 属性:定义了一个名为 xsd 的命名空间前缀,并将其映射到 http://www.w3.org/2001/XMLSchema,用于引用 XML Schema 相关的元素和数据类型。

definitions 元素作为 WSDL 文档的根元素,用于包含整个文档的定义和所有其他元素的声明。

  1. message 元素:用于定义网络服务的消息结构,包含了消息的名称和消息参数的类型。
1
2
3
4
5
6
7
<message name="GetStockPriceRequest">
<part name="StockSymbol" type="xsd:string"/>
</message>

<message name="GetStockPriceResponse">
<part name="Price" type="xsd:float"/>
</message>

这部分代码定义了两个消息,分别是 GetStockPriceRequestGetStockPriceResponse

  1. GetStockPriceRequest
    • <message> 元素用于定义消息,其中 name 属性指定了消息的名称为 "GetStockPriceRequest"。
    • GetStockPriceRequest 消息中,使用 <part> 元素指定了消息的部分内容。
    • <part> 元素的 name 属性定义了消息部分的名称为 "StockSymbol",用于标识股票代码。
    • <part> 元素的 type 属性定义了消息部分的数据类型为 "xsd:string",表示股票代码是一个字符串类型的数据。
  2. GetStockPriceResponse
    • 同样,<message> 元素用于定义消息,名称为 "GetStockPriceResponse"。
    • GetStockPriceResponse 消息中,使用 <part> 元素指定了消息的部分内容。
    • <part> 元素的 name 属性定义了消息部分的名称为 "Price",用于表示股票价格。
    • <part> 元素的 type 属性定义了消息部分的数据类型为 "xsd:float",表示股票价格是一个浮点数类型的数据。
  1. portType 元素:定义了网络服务的端口类型,即服务接口的抽象描述,包含了服务的操作(operation)。
1
2
3
4
5
6
<portType name="StockPortType">
<operation name="GetStockPrice">
<input message="tns:GetStockPriceRequest"/>
<output message="tns:GetStockPriceResponse"/>
</operation>
</portType>

这部分代码定义了一个名为 StockPortType 的端口类型(PortType),其中包含一个名为 GetStockPrice 的操作(Operation)。

  • <portType> 元素用于定义端口类型,其 name 属性指定了端口类型的名称为 "StockPortType"。
  • StockPortType 中,使用 <operation> 元素定义了一个操作,其 name 属性指定了操作的名称为 "GetStockPrice"。
  • GetStockPrice 操作中,使用 <input> 元素指定了输入消息,其 message 属性引用了之前定义的 GetStockPriceRequest 消息。
  • 使用 <output> 元素指定了输出消息,其 message 属性引用了之前定义的 GetStockPriceResponse 消息。

这样就定义了一个名为 GetStockPrice 的操作,该操作接受 GetStockPriceRequest 消息作为输入,并返回 GetStockPriceResponse 消息作为输出。

  1. binding 元素:将端口类型与具体的传输协议和消息格式绑定在一起,定义了服务的具体实现。
1
2
3
<binding name="StockBinding" type="tns:StockPortType">
<!-- 具体的传输协议和消息格式定义 -->
</binding>
  • <binding> 元素用于定义绑定,其 name 属性指定了绑定的名称为 "StockBinding"。
  • type 属性指定了要绑定的端口类型,即 StockPortType。在本例中,tns: 前缀表示该类型位于同一命名空间中,即 http://example.com/stockservice
  1. service 元素:定义了具体的网络服务,包含了服务的端口和地址信息。
1
2
3
4
5
<service name="StockService">
<port name="StockPort" binding="tns:StockBinding">
<soap:address location="http://example.com/stockservice"/>
</port>
</service>

这部分代码定义了一个名为 StockService 的服务,并声明了一个名为 StockPort 的端口,将其绑定到先前定义的名为 StockBinding 的绑定。

  • <service> 元素用于定义服务,其 name 属性指定了服务的名称为 "StockService"。
  • <service> 元素内部,<port> 元素用于定义端口。name 属性指定了端口的名称为 "StockPort"。
  • binding 属性用于指定与此端口关联的绑定,即 tns:StockBinding。在本例中,tns: 前缀表示该绑定位于同一命名空间中,即 http://example.com/stockservice
  • <soap:address> 元素用于指定端口的地址(location),即服务的终结点。在本例中,http://example.com/stockservice 是服务的地址。

WSDL 端口类型(PortType)

  • 定义:WSDL(Web Services Description Language)文档中的 <portType> 元素用于定义一组操作,这些操作可由网络服务执行。它类似于一个接口,定义了服务所支持的操作及其消息格式。

  • 作用:端口类型定义了服务的抽象接口,描述了服务所支持的操作及其输入和输出消息。它不涉及具体的协议或终结点地址,只描述了操作和消息之间的关系。

  • 构成:端口类型由一个或多个操作组成,每个操作由一个或多个输入消息和一个输出消息组成。

示例:

1
2
3
4
5
6
<portType name="StockPortType">
<operation name="GetStockPrice">
<input message="tns:GetStockPriceRequest"/>
<output message="tns:GetStockPriceResponse"/>
</operation>
</portType>

解释:

  • <portType> 元素定义了一个名为 "StockPortType" 的端口类型。
  • <operation> 元素定义了一个名为 "GetStockPrice" 的操作,该操作接受名为 "GetStockPriceRequest" 的输入消息,并返回名为 "GetStockPriceResponse" 的输出消息。

操作类型

类型 定义
One-way 此操作可接受消息,但不会返回响应。
Request-response 此操作可接受一个请求并会返回一个响应
Solicit-response 此操作可发送一个请求,并会等待一个响应。
Notification 此操作可发送一条消息,但不会等待响应。
  1. One-way(单向)

    • 定义:此操作类型表示服务可以接收消息,但不需要返回响应。这意味着客户端向服务发送请求,但服务不会回复。

    • 示例

      1
      2
      3
      <operation name="LogError">
      <input message="tns:ErrorMessage"/>
      </operation>
    • 解释:这个示例中,LogError 操作接收一个消息,用于记录错误,但不需要向客户端返回任何响应。

  2. Request-response(请求-响应)

    • 定义:此操作类型表示客户端向服务发送请求,并期望服务返回响应。

    • 示例

      1
      2
      3
      4
      <operation name="GetWeather">
      <input message="tns:GetWeatherRequest"/>
      <output message="tns:GetWeatherResponse"/>
      </operation>
    • 解释:这个示例中,GetWeather 操作接收一个请求消息,获取天气信息,并返回一个响应消息,包含天气数据。

  3. Solicit-response(请求-响应)

    • 定义:此操作类型表示客户端向服务发送一个请求,并等待服务的响应。与 Request-response 类似,但是在 Solicit-response 中,服务主动发送请求。

    • 示例

      1
      2
      3
      4
      <operation name="BookFlight">
      <input message="tns:FlightRequest"/>
      <output message="tns:FlightBookingConfirmation"/>
      </operation>
    • 解释:在这个示例中,BookFlight 操作接收客户端的请求消息来预订航班,并返回航班预订的确认消息。

  4. Notification(通知)

    • 定义:此操作类型表示服务可以发送一条消息,但不期望接收客户端的响应。

    • 示例

      1
      2
      3
      <operation name="SendNotification">
      <input message="tns:NotificationMessage"/>
      </operation>
    • 解释:在这个示例中,SendNotification 操作允许服务发送一条通知消息给客户端,但不需要等待客户端的响应。**


WSDL 绑定

WSDL 绑定用于定义 Web 服务的消息格式和通信协议细节。绑定到 SOAP 就是指使用 SOAP 协议作为 Web 服务的通信协议。

绑定到 SOAP:
绑定到 SOAP 是指将 Web 服务绑定到 SOAP 协议,以定义消息格式和通信协议。

请求-响应操作:
请求-响应操作是一种常见的 Web 服务操作类型,其中客户端发送请求并期待服务端返回响应。

<binding>元素属性:**

  • name: 定义了绑定的名称。
  • type: 指向用于绑定的端口类型。

soap:binding 元素属性:

  • style: 指定消息的样式,通常为 "document" 或 "rpc"。
  • transport: 指定传输协议,如 HTTP。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
<binding name="StockBinding" type="tns:StockPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetStockPrice">
<soap:operation soapAction="http://example.com/stockservice/GetStockPrice"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

解释:

在上述示例中:

  • <binding> 元素定义了名为 "StockBinding" 的绑定,将操作与端口类型 "StockPortType" 关联起来。
  • <soap:binding> 元素指定了使用 SOAP 协议进行通信,其中 style 属性设置为 "document",表示使用 SOAP 文档样式。
  • <operation> 元素定义了单个操作,这里是 "GetStockPrice"。
    • <soap:operation> 元素定义了操作的 SOAP 操作,即在 SOAP 消息中的操作名称。
    • <input><output> 元素定义了操作的输入和输出。
      • <soap:body> 元素的 use 属性设置为 "literal",表示消息体中的内容是直接的 XML 文字,而不是引用或编码。

UDDI(Universal Description, Discovery and Integration)

什么是 UDDI?

  • UDDI 是一种目录服务,用于企业注册和搜索 Web 服务。
  • 它是跨平台的描述规范,允许企业在互联网上发布其提供的服务。

UDDI 的构成和基础:

  • UDDI 的全称是 "通用描述、发现与集成服务"(Universal Description, Discovery and Integration)。
  • UDDI 使用 XML 来描述 Web 服务的信息。
  • 通过 SOAP 进行通信。
  • UDDI 已经集成到了微软的 .NET 平台中。

UDDI 的基础:

  • 使用了因特网标准,如 XML、HTTP 和 DNS 协议。
  • 使用 WSDL 来描述 Web 服务的接口。

UDDI 的好处:

  1. 发现和集成服务: 使得在互联网上发现和集成服务成为可能。
  2. 扩展业务: 帮助企业扩展客户和市场范围,增加销售和市场份额。
  3. 解决问题: 解决了之前在互联网经济中合作、交流和寻找合适的企业和服务的难题。

UDDI 的应用:

  • 企业可以注册其服务到 UDDI 目录中,然后其他企业可以搜索这些服务并与其通信。
  • 例如,航空公司可以注册其预订服务,然后旅行社可以搜索这些服务并进行预订。

UDDI 的支持者:

  • UDDI 是跨行业的研究项目,得到了所有主要平台和软件提供商的支持,包括 Dell、Fujitsu、HP、IBM、Microsoft、Oracle、SAP 和 Sun 等。

WSDL(Web Services Description Language)语法知识点:

  1. 元素:
    • 定义 WSDL 文档的根元素。
    • 包含 WSDL 文档中所有其他元素。
    • 可以指定名称、目标命名空间以及命名空间的前缀。
  2. 元素:
    • 用于定义消息的结构。
    • 包含一个或多个 元素,用于定义消息的不同部分。
    • 每个 元素定义了消息的一个参数或属性,包括名称和类型。
  3. 元素:
    • 定义一个抽象的服务接口。
    • 包含一个或多个 元素,用于定义服务的操作或方法。
  4. 元素:
    • 定义服务接口中的操作或方法。
    • 包含一个输入消息和一个输出消息,有时也包含错误消息。
    • 可以指定操作的名称、输入消息和输出消息的名称。
  5. 元素:
    • 定义消息格式和协议细节,用于将抽象的服务端口绑定到具体的协议和消息格式。
    • 可以指定名称和类型。
    • 包含一个 元素,用于指定 SOAP 协议的绑定信息。
  6. 元素:
    • 定义一个具体的服务。
    • 包含一个或多个 元素,用于定义服务的端口。
    • 可以指定服务的名称。
  7. 元素:
    • 定义一个端口,用于绑定服务到具体的网络地址。
    • 包含一个 元素,用于指定服务的访问地址。
  8. 元素:
    • 用于指定 SOAP 协议的绑定信息,包括样式(style)和传输(transport)。
    • 样式(style)可以是 document 或 rpc。
    • 传输(transport)指定了 SOAP 消息在传输中使用的协议,通常是 HTTP 或 HTTPS。