0

这是对我发布的Android 访问肥皂服务问题的跟进。经过大量调试和使用wireshark后,我意识到这就是发送的内容。

 POST /GetGoldPrice.asmx HTTP/1.1 
user-agent: kSOAP/2.0 
soapaction: http://freewebservicesx.com/GetCurrentGoldPrice 
content-type: text/xml 
connection: close 
content-length: 475 
Host: www.freewebservicesx.com 

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body>
<GetCurrentGoldPrice xmlns="http://www.freewebservicesx.com/" id="o0" c:root="1">
<UserName i:type="d:string">username</UserName>
<Password i:type="d:string">111</Password></GetCurrentGoldPrice></v:Body></v:Envelope> 
HTTP/1.1 500 Internal Server Error 
Connection: close 
Date: Mon, 09 Apr 2012 04:38:50 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Cache-Control: private 
Content-Type: text/xml; charset=utf-8 
Content-Length: 753 

错误响应

<?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">
<soap:Body><soap:Fault><faultcode>soap:Server</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Server was unable to process request. ---&gt; System.ArgumentNullException: Value cannot be null. 
Parameter name: password 
   at System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(String password, String passwordFormat) 
   at GetGoldPrice.GetCurrentGoldPrice(String UserName, String Password) 
   --- End of inner exception stack trace ---</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>

网站期望的详细信息。

http://www.freewebservicesx.com/GetGoldPrice.asmx?op=GetCurrentGoldPrice

4

2 回答 2

1

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>
    <GetCurrentGoldPrice xmlns="http://freewebservicesx.com/">
      <UserName>string</UserName>
      <Password>string</Password>
    </GetCurrentGoldPrice>
  </soap:Body>
</soap:Envelope>

编辑:是的,我假设您正确关闭了 <UserName> 标记,并且问题是一个错字。

最新编辑:通过 ASP.Net C# 尝试示例后,我能够在发送以下 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">
  <soap:Body>
    <GetCurrentGoldPrice xmlns="http://freewebservicesx.com/">
      <UserName>username</UserName>
      <Password>password</Password>
    </GetCurrentGoldPrice>
  </soap:Body>
</soap:Envelope>

我得到的回应是:

<?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">
  <soap:Body>
    <GetCurrentGoldPriceResponse xmlns="http://freewebservicesx.com/">

      <GetCurrentGoldPriceResult>
        <string>0</string>
        <string>JAN 2, 2000 00:-00 PM EST</string>
        <string>+0.0</string>
      </GetCurrentGoldPriceResult>
    </GetCurrentGoldPriceResponse>
  </soap:Body>
</soap:Envelope>

当用户名和密码不正确时,我认为这是一个相关的响应。您可以通过从 Android 生成类似请求来进行检查吗?

编辑:添加了有关如何将 XML 从 Android 发布到 Web 服务的链接。参考:Android,通过 HTTP POST (SOAP) 发送 XML

于 2012-04-09T04:17:43.373 回答
0
<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

将此添加到标签中的web.config文件system.web

于 2012-11-28T12:05:15.887 回答