peoInfo.setType(People.class);
outObject.addProperty(peoInfo);*/
SoapSerializationEnvelope serializationEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);//设置soap版本
// 这一步添加映射非常关键
// 第一个参数为命名空间,第二参数为服务器中复杂类型的名称,第三参数是安卓的复杂类型
serializationEnvelope.addMapping(nameSpace, "People", People.class);
serializationEnvelope.bodyOut = outObject;
serializationEnvelope.dotNet = true;// 调用.NET的服务
HttpTransportSE transportSE = new HttpTransportSE(url);
transportSE.debug = true;// 采用调试
try {
transportSE.call(soapAction, serializationEnvelope);// 调用服务
Log.v("happy1", "服务调用成功");
SoapObject result = (SoapObject) serializationEnvelope.bodyIn;
//把结果封送到消息中去,让ui线程显示
Bundle bundle = new Bundle();
bundle.putString("result",result.getProperty(0).toString());
Message message = new Message();
message.setData(bundle);
message.what = 11;
hander.sendMessage(message);
return result;
} catch (IOException ex) {
Log.v("sad", "IO异常");
ex.printStackTrace();
} catch (XmlPullParserException ex) {
Log.v("sad", "xml解析异常");
ex.printStackTrace();
} catch (Exception ex) {
Log.v("sad", "服务调用异常异常");
}
return null;
}
//按钮事件
btnObj.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Thread thread = new Thread(getSoapRequest);
thread.start();
}
});
//线程
Runnable getSoapRequest=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
getSoapResult();
}
};
//消息处理
Handler hander = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what=11){
lblResult.append(msg.getData().getString("result")+"\r\n");
}
}
};
上面的代码就能够传递复杂类型去调用WebService的服务,返回结果如下:
姓名:Juame/年龄:23
5 简述Wcf与WebServic的区别
WebService是一个行业标准,也是Web Service的规范,既不是框架,也不是技术,它使用xml扩展标记语言来表示数据,这正是WebService能够跨语言和平台的关键,而微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。
WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。在一定程度上就是WebService,不得不说WCF确实非常方便,提供非常多且好用的特性,可以用来创建各种服务,而且自定义性也高,以后项目的服务搭建都会基于WCF来实现。
6 小结
本文总结了如何使用android调用web服务。在传递复杂类型调用服务的时候纠结的了半天,最后实现了传递复杂类型调用WebService服务,但没有实现对WCF服务的调用,而传递基类型调用服务,两者都可以。在第5小节中还简述了wcf和webservice之间的区别,其实在项目大都是采用wcf框架来发布自己的服务。下面会继续总结如何用java script来调用wcf发布的服务。
另Ksaop2下载链接:http://download.csdn.net/download/mingge38/9666650
|