http://sizeed.blog.163.com/blog/static/965254512011102143952442/
使用ksoap2调用Web Service步骤如下:
1、创建HttpTransportSE对象(传送带),该对象用于调用Web Service。
2、创建SoapSerializationEnvelope对象(装SOAP信息的信封)。
3、创建SoapObject对象,创建该对象时需要传入所需要调用的WebService的命名空间。
4、如果有参数需要传递给Web Service服务器,调用SoapObject对象的addProperty(String key, Object value)方法。
5、调用前面创建的SoapSerializationEnvelope对象的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前面创建的SoapObject对象设为SoapSerializationEnvelope的传出的SOPA。
6、调用HttpTransportSE对象的call()方法,并以SopaSerializationEnvlope作为参数调用远程Web Service。
7、调用完成后,访问SoapSerializationEnvelope对象的bodyIn,该属性会返回一个SopaObjec对象,该对象代表了一个Web Service服务端返回的数据,解析该SoapObject就可以得到你想要的数据了。
可以这样理解:
首先创建的HttpTransportSE(以下简写trans)对象可以看做它为一个传送带,SoapSerializationEnvelope对象(以下简写envelope)为一个邮递员,SoapObject(以下简写so)为一个包裹:
so.addProperty(WordKey,word):将“询问”的信息装入包裹。
envlope.bodyOut = so:邮递员拿上Out包裹,待送。
ht.call(..., envlope)方法:邮递员拿着包裹,跳上传送带去访问服务器并交换数据。
SoapObject so = (SoapObject)envlope.bodyIn:从邮递员身上拿出和服务器交换后的包裹。此包裹与上面的so不是同一个对象
so.getProperty(...):从包裹中取出“回答”信息。
以上就是使用ksoap2-android调用Web Service的方式。
代码:
SoapObject rpc = new SoapObject(NAME_SPACE, METHOD_NAME);//设置需调用WebService接口
//设置参数
rpc.addProperty("a", 109);
rpc.addProperty("b", 3);
// 生成调用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(URL);
try {
//调用WebService
transport.call(SOAP_ACTION, envelope);
} catch (Exception e) {
e.printStackTrace();
}
//获取返回的数据
SoapObject object = (SoapObject) envelope.bodyIn;
//获取返回的结果
String result = object.getProperty("return")+"";
return result;