这是对我发布的问题Android accesing soap service的跟进。经过大量调试并使用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. ---> 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
答案 0 :(得分:1)
XML区分大小写。改变
&LT;密码&GT;
到
&LT;密码&GT;
到处适用。 请参阅下面的标签定义。
<?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>
编辑:是的,我认为你正在关闭&lt; UserName&gt;标签和问题是一个错字。
编辑最新: 在通过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, sending XML via HTTP POST (SOAP)
答案 1 :(得分:0)
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
将其添加到web.config
代码
system.web
文件中