我正在尝试使用QAS Web服务在英国进行邮政编码查找。当我发布请求XML时,它显示“服务器无法识别HTTP标头SOAPAction:DoSearch的值”。
当我删除mMethod.setRequestHeader(“ SOAPAction”,“ / DoSearch”);从我的SOAPClient,然后收到的错误是
如果没有有效的操作参数,则无法处理请求。请提供有效的肥皂动作。
到WSDL的链接是:
https://ws.ondemand.qas.com/ProOnDemand/V3/ProOnDemandService.asmx?WSDL
我猜这是我无法在标头中设置操作参数的问题,但是我对执行此操作没有任何线索,这有点卡住了。请帮忙。
我尝试发布的请求XML是:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:qas="http://www.qas.com/OnDemand_2011-03">
<soap:Header>
<qas:QAAuthentication>
<qas:Username>username</qas:Username>
<qas:Password>password</qas:Password>
</qas:QAAuthentication>
</soap:Header>
<soap:Body>
<QASearch RequestTag="Single Line postcode search"
xmlns:web="http://www.qas.com/OnDemand_2011_03">
<web:Country>GBR</web:Country>
<web:Engine Flatten="true ">Singleline</web:Engine>
<web:Layout>QADefault</web:Layout>
<web:Search>B168JR</web:Search>
</QASearch>
</soap:Body>
</soap:Envelope>
最佳答案
抱歉,太晚了,我只看了您的问题-我当然希望您能够在此之前解决问题!
您是否使用自动化工具从WSDL创建该请求或手动创建了该请求?您的请求结构存在一些问题,如果我们进行更改应允许请求。
为了使其正常工作,您需要使用类似于以下的结构:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:qas="http://www.qas.com/OnDemand-2011-03">
<soap:Header>
<qas:QAQueryHeader>
<qas:QAAuthentication>
<qas:Username>username</qas:Username>
<qas:Password>password</qas:Password>
</qas:QAAuthentication>
</qas:QAQueryHeader>
</soap:Header>
<soap:Body>
<qas:QASearch>
<qas:Country>GBR</qas:Country>
<qas:Engine Flatten="true ">Singleline</qas:Engine>
<qas:Layout>QADefault</qas:Layout>
<qas:Search>B168JR</qas:Search>
</qas:QASearch>
</soap:Body>
</soap:Envelope>
我几乎没有改变。
qas:QAQueryHeader已添加到标题中。 QAS OnDemand服务需要这样做。
更正了您的名称空间(下划线到破折号):
之前:xmlns:qas =“ http://www.qas.com/OnDemand_2011-03”
After:xmlns:qas =“ http://www.qas.com/OnDemand-2011-03”
删除了用于QASearch的多余名称空间导入,以简化和整理请求。