webservice请求
先推荐一个检测工具,火狐浏览器自带的插件:HttpRequester。他可以检测webservice请求是否正确。
接口:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
如图:
那么我们在代码中如何请求呢?
首先我们来看一下这个请求:
这里需要一个soap.jar,可以在网上下载
下面来看一下代码:
private SoapObject CallWebServices(String byProvinceName ) {
SoapObject result =null;
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(NAMESPACE, METHODNAME);
//添加参数
PropertyInfo p =new PropertyInfo();
p.setName("byProvinceName");
p.setValue(byProvinceName);
rpc.addProperty(p);
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
HttpTransportSE transport = new HttpTransportSE(ENDPOINT);
try {
// 调用WebService
transport.call(SOAPACTION, envelope);
} catch (Exception e) {
e.printStackTrace();
}
// 获取返回的数据
try {
result = (SoapObject) envelope.getResponse();
} catch (SoapFault soapFault) {
soapFault.printStackTrace();
}
Log.i("yqy","请求结果=="+result);
return result;
}
具体的域名什么的可以查看其对于的WSDL
上面的请求中没有soapHeader,如果加上soapHeader又该怎么请求呢?
只要在代码中添加上下面这段:(这个的命名空间是“http://tempuri.org”)
//添加headers
Element[] headers =new Element[1];
headers[0] =new Element().createElement(NAMESPACE,"MySoapHeader");//这里要和接口里的对应上
Element userName =new Element().createElement(NAMESPACE,"UserName");
userName.addChild(Node.TEXT,"UserName对应的字符串");
headers[0].addChild(Node.ELEMENT,userName);
Element password =new Element().createElement(NAMESPACE,"PassWord");
password.addChild(Node.TEXT,"PassWord对应的字符串");
headers[0].addChild(Node.ELEMENT,password);
然后添加到envelope
envelope.headerOut = headers;
好多还不是很清楚,先做个记录。
以上