6

我需要在这个 .NET 站点上使用 Web 服务:

https://www.iyardiasp.com/8223third_17/webservices/ItfResidentData.asmx

对于初步消费,我使用 Fiddler 或 curl。两者都给出相同的错误:

<faultstring>Unable to handle request without a valid action parameter. Please supply a valid soap action.</faultstring> 

我的卷曲命令:

curl -d @GetVersionNumber.xml https://www.iyardiasp.com/8223third_17/webservices/ItfResidentData.asmx

请参阅下面的 GetVersionNumber.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <GetVersionNumber xmlns="http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData" />
</soap:Body>
</soap:Envelope>

添加 SOAP-ENV:Header 作为 soap:Envelope 中的元素没有帮助

<SOAP-ENV:Header Content-Type="text/xml" Host="www.iyardiasp.com" SOAPAction="http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData/GetVersionNumber"/>

将 Soap Action 添加为标题并没有帮助。

在这种情况下,curl 命令是:

curl -H“SOAPAction:http ://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData/GetVersionNumber ”-d @GetVersionNumber.xml“ https://www.iyardiasp.com/8223third_17/webservices/itfapplicantscreening.asmx

回应是:

<faultstring>Server did not recognize the value of HTTP Header SOAPAction: http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData/GetVersionNumber.</faultstring>
4

1 回答 1

12

您需要提供SOAPActionHTTP 标头,而不是 SOAP 标头。以下是使用 SoapUI 执行完整请求时的样子(注意第四行):

POST /8223third_17/webservices/ItfResidentData.asmx HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData/GetVersionNumber"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: www.iyardiasp.com
Content-Length: 260

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:itf="http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData">
   <soapenv:Body>
      <itf:GetVersionNumber/>
   </soapenv:Body>
</soapenv:Envelope>

因为curl您可能会使用该-H参数来发送SOAPAction标头,但我建议您使用 SoapUI进行初步消费(它SOAPAction默认包含标头并在任何一天都可以击败控制台)。

如果您确实需要使用curl,请尝试以下操作(所有内容都必须在一行上;为便于阅读而分开):

curl -H "Content-Type: text/xml;charset=UTF-8" 
     -H "SOAPAction: \"http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData/GetVersionNumber\"" 
     -d @GetVersionNumber.xml 
     https://www.iyardiasp.com/8223third_17/webservices/ItfResidentData.asmx

GetVersionNumber.xml文件中有这个:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:itf="http://tempuri.org/YSI.Interfaces.WebServices/ItfResidentData">
   <soapenv:Body>
      <itf:GetVersionNumber/>
   </soapenv:Body>
</soapenv:Envelope>
于 2013-10-04T10:08:39.857 回答