WSDL 教程

WSDL 教程(2025 版,通俗易懂完整指南)

WSDL(Web Services Description Language,Web 服务描述语言)是 XML 格式的文件,用来描述一个 SOAP Web Service 提供了哪些操作(operation)、输入输出消息格式、绑定协议(通常是 SOAP)、服务地址等。简单来说:WSDL 就是 Web Service 的“说明书”

虽然现在 REST/GraphQL 更流行,但很多银行、电信、政府、企业内部系统仍然大量使用 SOAP + WSDL(尤其是中国),所以学会读写 WSDL 仍然非常有价值。

1. WSDL 2.0 基本结构(最常用的是 WSDL 1.1,但 2.0 更简洁)

一个典型的 WSDL 文件包含以下 7 大核心部分:

<?xml version="1.0" encoding="UTF-8"?>
<definitions 
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://example.com/weather/" 
    targetNamespace="http://example.com/weather/"
    name="WeatherService">

    <!-- 1. 类型定义(types)-->
    <types>
        <xs:schema targetNamespace="http://example.com/weather/">
            <xs:element name="GetTemperatureRequest">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="city" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

            <xs:element name="GetTemperatureResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="temperature" type="xs:int"/>
                        <xs:element name="unit" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </types>

    <!-- 2. 消息(message)-->
    <message name="GetTemperatureInput">
        <part name="parameters" element="tns:GetTemperatureRequest"/>
    </message>
    <message name="GetTemperatureOutput">
        <part name="parameters" element="tns:GetTemperatureResponse"/>
    </message>

    <!-- 3. 端口类型(portType)= 接口 -->
    <portType name="WeatherPortType">
        <operation name="GetTemperature">
            <input message="tns:GetTemperatureInput"/>
            <output message="tns:GetTemperatureOutput"/>
        </operation>
    </portType>

    <!-- 4. 绑定(binding)= 具体怎么传(SOAP 1.1 / SOAP 1.2 / HTTP GET/POST)-->
    <binding name="WeatherSoapBinding" type="tns:WeatherPortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetTemperature">
            <soap:operation soapAction="http://example.com/weather/GetTemperature"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>

    <!-- 5. 服务(service)-->
    <service name="WeatherService">
        <port name="WeatherPort" binding="tns:WeatherSoapBinding">
            <soap:address location="http://example.com/weather/service"/>
        </port>
    </service>
</definitions>

2. 每个部分到底是干什么的?

部分作用类比 Java/.NET
types定义请求和响应的 XML 结构(用 XSD)参数类、返回类(DTO)
message把 types 里的元素包装成“消息”方法的一个输入或输出参数
portType定义抽象接口(有哪些操作)Java Interface 或 C# interface
binding具体用什么协议传(SOAP 1.1、1.2、HTTP)实现接口的具体方式
service告诉你在哪台服务器、哪个 URL 上能访问部署后的服务地址

3. 两种常见的 style/use 组合(最容易踩坑的地方)

styleuse说明生成代码是否好看
documentliteral推荐!XML 直接按 schema 走,不包一层非常干净(主流)
rpcencoded老古董,几乎没人用了,参数会变成 123难看,已淘汰
documentencoded不合法组合
rpcliteral偶尔见到一般

2025 年 99% 的新项目都用 document/literal wrapped

4. 快速上手实战(3 分钟生成客户端)

工具推荐(任选其一):

  1. SoapUI(最简单)
    File → New SOAP Project → 把 WSDL URL 贴进去 → 自动生成所有请求模板
  2. Java 21+(内置 jakarta.xml.ws 已移除,用 Apache CXF 或 Spring Boot)
   # 用 Apache CXF(推荐)
   wsdl2java -p com.example.weather -autoNameResolution http://example.com/weather?wsdl
  1. .NET 8
   dotnet svcutil http://example.com/weather?wsdl
  1. Python
   pip install zeep
   from zeep import Client
   client = Client('http://example.com/weather?wsdl')
   result = client.service.GetTemperature(city="Beijing")
   print(result)

5. 常见 WSDL 地址示例(可以直接拿来练习)

  • 全球天气(已停用很多,但还有存活的):
    http://www.webservicex.net/globalweather.asmx?WSDL
  • 中国手机号归属地(持续多年可用):
    https://cx.shouji.360.cn/phonearea.php?wsdl
  • 身份证查询(测试用):
    http://www.webxml.com.cn/WebServices/IdCardWS/idcard.asmx?wsdl

6. 小结:读懂 WSDL 的 4 步法

  1. 打开 WSDL,先找 <service name="XXX"> 看服务叫什么名字
  2. <port> 里面的 <soap:address location="..."> → 这就是你要调的 URL
  3. <binding><portType> 看支持哪些 operation(方法)
  4. <types> 里的 <xs:element name="xxxRequest">xxxResponse 看请求响应结构

只要掌握这 4 步,任何 WSDL 你都能秒懂!

需要我给你一个完整的可运行 Spring Boot + Apache CXF 示例,或者 .NET 8 示例,或者 Postman/SoupUI 导入技巧,直接告诉我!

文章已创建 2965

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部