无法获取含有效SOAPAction的完整WSDL响应的技术问询
解决National Rail OpenLDBWS的WSDL获取与SOAPAction错误问题
1. 获取完整包含所有操作的WSDL
你当前请求的主WSDL只是一个导入实际定义的入口文件,仅包含服务地址,没有操作细节。需要直接请求导入的子WSDL文件:
- 主WSDL里的
location="rtti_2021-11-01_ldb.wsdl"是相对路径,完整URL为:https://lite.realtime.nationalrail.co.uk/OpenLDBWS/rtti_2021-11-01_ldb.wsdl - 直接GET这个URL就能拿到包含所有操作、SOAPAction定义和数据类型的完整WSDL。
2. 正确设置SOAPAction请求头
从完整WSDL中提取每个操作对应的soapAction值:
- 在WSDL的
<binding>节点下,每个<soap:operation>标签的soapAction属性就是请求头需要的精确值,例如:<soap:operation soapAction="http://thalesgroup.com/RTTI/2021-11-01/ldb/GetDepartureBoard" style="document"/> - 发送请求时,SOAPAction请求头必须完全匹配该值,包括完整的命名空间路径,不能随意填写或省略。
3. 修正SOAP请求的命名空间与内容
你的SOAP请求存在两个关键问题:
- 命名空间不匹配:你使用了
http://thalesgroup.com/RTTI/2014-02-20/ldb/,但WSDL的目标命名空间是http://thalesgroup.com/RTTI/2021-11-01/ldb/,需要统一替换为2021-11-01版本。 - 请求Body为空:必须包含具体的操作请求元素(如
GetDepartureBoard)并传入必要参数。
示例修正后的SOAP请求:
<?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:service="http://thalesgroup.com/RTTI/2021-11-01/ldb/" xmlns:types="http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes"> <SOAP-ENV:Header> <types:AccessToken> <types:TokenValue>{{token}}</types:TokenValue> </types:AccessToken> </SOAP-ENV:Header> <SOAP-ENV:Body> <service:GetDepartureBoardRequest> <service:numRows>10</service:numRows> <service:crs>LON</service:crs> </service:GetDepartureBoardRequest> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
4. 请求头的正确配置
- SOAP 1.1:设置
Content-Type: text/xml; charset=utf-8,同时添加SOAPAction: "http://thalesgroup.com/RTTI/2021-11-01/ldb/GetDepartureBoard"(注意引号)。 - SOAP 1.2:设置
Content-Type: application/soap+xml; charset=utf-8; action="http://thalesgroup.com/RTTI/2021-11-01/ldb/GetDepartureBoard",无需单独的SOAPAction请求头。
内容的提问来源于stack exchange,提问作者Gavin
相关产品推荐
相关产品推荐

