Web Services 使用Web服务会导致“无法处理没有有效操作参数的请求”

dvtswwa3  于 2023-01-21  发布在  其他
关注(0)|答案(2)|浏览(679)

我需要使用此.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命令:
curl -d @获取版本号.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“SOAP操作:“-d @获取版本号.xml“
回答是:

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

bpzcxfmw1#

您需要提供SOAPAction作为HTTP头,而不是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报头,但我建议您使用use 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>
kknvjkwl

kknvjkwl2#

可能没有人再使用asmx文件了--但我是:),而且刚刚遇到了这个问题。一般的问题是,.net没有任何迹象表明这是一个处理SOAP请求等事务的WebMethod。
其他的答案可能以它们自己的方式是有效的,但是对于超级简单的情况,确保您的方法用[WebMethod]属性来装饰解决了我的问题。

[WebMethod]
public string test() { return "Hello World"];

该属性可能还负责将响应 Package 在SOAP Package 器中。
啊,微软。这么多的自动化,但更长的学习曲线。

相关问题