WSDL是描述Web服务的XML说明书,非接口本身;wsdl:portType定义抽象操作(能做什么),wsdl:binding定义协议实现细节(怎么做到);工具如wsimport、zeep依据binding生成客户端代码。
WSDL(Web Services Description Language)不是接口本身,而是一份用 XML 写的“接口说明书”——它不执行逻辑,只声明服务有哪些操作、每个操作要什么参数、返回什么结构、走什么协议、在哪访问。
wsdl:portType 和 wsdl:binding 的区别在哪
这是初学者最容易混淆的一对概念:wsdl:portType 描述「能做什么」(抽象接口),比如 getWeather 接收 cityName 字符串,返回 Temperature 类型;wsdl:binding 描述「怎么做到」(具体协议细节),比如这个操作走 SOAP 1.1、用 POST 方法、消息用文档/字面量(document/literal)风格序列化。
- 没定义
wsdl:binding,就只是个空想接口,没法调用 - 同一个
wsdl:portType可以有多个wsdl:binding(比如同时支持 SOAP 和 HTTP GET) - 实际生成客户端代码时,工具(如
wsimport或zeep)依赖的是wsdl:binding里的传输和编码规则
如何从 WSDL 自动生成调用代码(以 Java 和 Python 为例)
手动解析 WSDL 并拼 SOAP 请求是自找麻烦。主流做法是用工具生成强类型客户端类,把 XML 封装成本地对象。