无法使用kso​​ap2库调用soap Web服务

时间:2013-09-15 05:26:33

标签: android web-services soap ksoap2

我是android的新手,也是肥皂网服务调用的新手。我试图使用kso​​ap2库调用基于SOAP的Web服务,但不断收到错误消息

  

java.io.IOException:HTTP请求失败,HTTP状态:405

但我无法理解为什么会这样。我在互联网上搜索过,找不到解决问题的方法。

这些是我正在使用的字段:

private static final String METHOD_NAME = "Authenticate";
private static final String SOAP_ACTION = "http://tempuri.org/IService1/Authenticate";
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
private static final String NAMESPACE = "http://tempuri.org/";

这是wsdl网址: http://www.w3schools.com/webservices/tempconvert.asmx?WSDL

这应该是请求格式: http://www.w3schools.com/webservices/tempconvert.asmx?WSDL

我已经通过网络服务工作室测试了这项服务,并得到了以下要求并且工作正常。

<?xml version="1.0" encoding="utf-16"?><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><Authenticate xmlns="http://tempuri.org/">
  <UserName>test</UserName>
  <Password>test</Password>
</Authenticate></soap:Body></soap:Envelope>

我正在尝试使用以下代码调用此服务

request = new SoapObject(NAMESPACE, METHOD_NAME);       
request.addProperty("UserName","test");
request.addProperty("Password","test");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.setOutputSoapObject(request);

HttpTransportSE ht = new HttpTransportSE(URL);
ht.call(SOAP_ACTION, envelope);

所以请帮助我从这项服务中获得回应。

1 个答案:

答案 0 :(得分:0)

为什么使用"http://demo.knowcross.com/TritonMobileService";作为URL?您可以在wsdl中找到服务地址,它是:

<soap:address location="http://demo.knowcross.com/TritonMobileService/Service1.svc"/>

因此您应将其用作URL

编辑: 您可以设置ht.debug=true并检查ht.requestDump是否正确。首先,您应该为这样的属性添加命名空间:

PropertyInfo p = new PropertyInfo();
p.setNamespace(NAMESPACE);
p.setValue("test");
p.setName("UserName");
request.addProperty(p);
p = new PropertyInfo();
p.setNamespace(NAMESPACE);
p.setValue("test");
p.setName("Password");
request.addProperty(p);