在Android开发中我们会遇到各种不同的接口,wcf就是其中的一种,Android并没有提供任何组件来调用wcf服务接口,所以我们就要使用到第三方的包KSOAP2来调用wcf服务
首先我们要下载引入KSOAP2的包
http://ksoap.objectweb.org/
采用异步的方式来访问服务,所以我们使用到了Android的异步方法AsyncTask
/**
* 异步方法访问服务
*
* @author admin
*
*/
private class GetDataTask extends AsyncTask<String, Void, WebServiceResult> {
// 执行在在onPreExecute之后,后台执行,进行异步数据处理
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected WebServiceResult doInBackground(String... params) {
WebServiceUtility wsUtility = new WebServiceUtility();
WebServiceResult wsResult = null;
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
map.put("参数Key", 参数值);;
try {
wsResult = wsUtility.CallService("服务名称", "方法名称", map);
} catch (Exception e) {
e.printStackTrace();
}
return wsResult;
}
// 将后台处理结果传递到UI线程
@Override
protected void onPostExecute(WebServiceResult result) {
if (result == null) {
Toast toast = Toast.makeText(context, "连接网络异常", Toast.LENGTH_LONG);
toast.show();
return;
}
int returnvalue = result.getReturnvalue();
}
}
}
- 将访问服务的方法集成一个公共类,这样我们调用起来什么方便不需要写大量的冗余代码
public class WcfServiceStationUtility {
/**
* 调用服务
*
* @param serviceName
* 服务名称
* @param menthodName
* 方法名称
* @param parames
* 参数
* @return 返回结果集为WebServiceResult的实体
* @throws JSONException
* 返回值为空或者类型不正确
* @throws XmlPullParserException
* @throws IOException
*/
public WebServiceResult CallService(String serviceName, String menthodName,
LinkedHashMap<String, Object> parames) throws JSONException,
IOException, XmlPullParserException {
String response = null;
// The method name used to call WebService.
String methodName = menthodName;
String NameSpace = 命名空间
SoapObject soapObject = new SoapObject(NameSpace, methodName);
Iterator<LinkedHashMap.Entry<String, Object>> paramesIter = parames
.entrySet().iterator();
// 设置参数
while (paramesIter.hasNext()) {
LinkedHashMap.Entry<String, Object> entry = (LinkedHashMap.Entry<String, Object>) paramesIter
.next();
Log.d("--WebServiceUtility-->>",
entry.getKey() + "=" + entry.getValue() + ";");
soapObject.addProperty((String) entry.getKey(), entry.getValue());
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 是否.net的Web Service
envelope.bodyOut = soapObject;
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
String url = 访问服务地址
HttpTransportSE ht = new HttpTransportSE(url);
ht.call(NameSpace + "/" + serviceName + "/" + methodName, envelope);
if (envelope.getResponse() != null) {
response = envelope.getResponse().toString();
Log.d("--WebServiceUtility-->>", "result"
+ envelope.getResponse().toString());
} else {
Log.e("--WebServiceUtility-->>", "调用服务失败!");
}
//服务返回值
return parseReponse(response);
}
/**
* 解析服务的结果集
*
* @param response
* @return
* @throws JSONException
* 返回值或者类型不正确时抛出异常
* 关于返回值的解析使用的是一个自己写的工具类
*/
private WebServiceResult parseReponse(String response)
throws JSONException {
WebServiceResult returnResult = (WebServiceResult) JsonUtility
.parseObject(response, WebServiceResult.class);
return returnResult;
}
}
- 最后别忘了加网络访问权限哦