在网上看到一篇关于android访问.NET 服务器的方法,感觉比我以前写的那个代码规范一点,所以保存下来,下面是原文:http://express.ruanko.com/ruanko-express_31/tech-overnight2.html
我们知道webservice是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台、不同语言、不同技术整合到一起。在本文中我们设定的场景就是通过android手机客户端访问基于.NET技术实现的server服务器端,实现两者之间的通信,我们知道android是使用JAVA语言进行开发,所以在实现细节上与常见的android手机客户端访问java语言开发的server端还是有所不同的。
在Android SDK中并没有提供调用webservice的库,因此需要使用第三方SDK来调用webservice。
PC版本的webservcie客户端库非常丰富,例如axis2,cxf等,但这些开发包对于android系统故偶庞大,也未必很容易移植到android系统中,适合手机的webservice客户端的SDK也有一些,一般我们用的是KSOAP2。
首先我们可以去http://code.google.com/p/ksoap2-android/downloads/list进行下载,将下载后代jar文件复制到Eclipse工程的lib目录中。并在Eclipse工程中引用这个jar包。
下面这个例子,实现的即是手机客户端登录,发送用户名和密码至服务器端,并进行判断:
public class WebService { private static final String NAME_SPACE = "http://COE.org/"; private static final String URL = "http://192.168.18.44/ serverInsurance/Services.asmx?wsdl"; private static SoapSerializationEnvelope envelope ; //调用WebService提供的方法 public static String transferService(String METHOD_NAME, Map<String,Object> map) { String state=null; SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = entry.getKey().toString(); String value = entry.getValue().toString(); request.addProperty(key,value); } envelope= new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = request; envelope.dotNet = true; HttpTransportSE ht = new HttpTransportSE(URL); try { ht.call(NAME_SPACE + METHOD_NAME, envelope); if (envelope.getResponse() != null) { // .net中web service返回的数据是object类型, 不能直接转成soapObject Object obj = envelope.getResponse(); if (obj != null) { state= obj.toString(); } else { state=null; } } else { state=null; } } catch (Exception e) { state=null; } return state; } } String METHOD_NAME = "LoginCheckUser"; Map<String,Object> map=new HashMap<String,Object>(); map.put("userName", userName); map.put("pwd", pwd); String json= WebService.transferService(METHOD_NAME, map); |
在这里我们必须注意的是.net中web service返回的数据是object类型,不能直接转成soapObject,这点必须特别注意,最后是需要访问网络,需要在AndroidManifest.xml加入:
<uses-permission android:name="android.permission.INTERNET" /> |
否则将无法进行正常的访问。