最近做一个项目,中间有用到Android端使用Asp.Net写的Webservice。用了比较常用的Ksoap2类库。可以通过下面地址下载
在Eclipse工程中引用这个jar包即可。
下面使用KSOAP2的步骤来编写调用WebService的客户端程序,代码如下:
1 //new 一个连接Webservice的类,这个类下面给出。webserviceUrl为//Webservice的连接地址,nameSpace为命名空间 2 private ConWebService conWebService = new ConWebService( 3 webserviceUrl ,nameSpace); 4 5 //给出一个中间层调用的方法,返还String数组 6 public ArrayList<String> getDate(String key) 7 { 8 ArrayList<String> arrayList = new ArrayList<String>(); 9 //添加参数,这个参数可以是多个循环添加即可 10 //如 11 //PropertyInfo pro[] = new PropertyInfo[2]; 12 //for (int i = 0; i < 2; i++) 13 //{ 14 //pro[i] = new PropertyInfo(); 15 //} 16 //pro[0].setName("sqlName"); 17 //pro[0].setValue(sqlName); 18 //pro[1].setName("date"); 19 //pro[1].setValue(date); 20 PropertyInfo pro = new PropertyInfo(); 21 pro.setName("key"); 22 pro.setValue(key); 23 arrayList =conWebService.getSoapData("getData", pro); 24 return arrayList; 25 }
下面的这个ConWebservice类是主要实现获取数据的功能了。给出关键代码
1 public ArrayList<String> getSoapData(String methodName, PropertyInfo... pros) 2 { 3 ArrayList<String> resultList = new ArrayList<String>(); 4 5 //1.创建SoapObject对象,并指定WebService的命名空间和调用的方法名 6 SoapObject soapObject = new SoapObject(NameSpace, methodName); 7 8 //2.设置SoapAction 9 soapAction = NameSpace + methodName; 10 11 //2.设置WebService方法的参数(以不定参数为例) 12 if (pros.length > 0) 13 { 14 for (PropertyInfo pro : pros) 15 { 16 soapObject.addProperty(pro); 17 } 18 } 19 //创建SoapSerializationEnvelope对象,生成调用WebService方法的SOAP请求信息,并指定WebService Soap协议的版本 20 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER12 ); 21 22 23 //设置bodyOut属性 (SoapEnvelope类中,设置发送的数据和接收数据,分别使用方法:bodyOut,bodyIn) 24 envelope.bodyOut = soapObject; 25 26 // 设置是否调用的是DotNet开发的WebService 27 envelope.dotNet = true; 28 29 //创建HttpTransportSE对象,并指定WSDL文档的URL 30 HttpTransportSE transport = new HttpTransportSE(WebserviceUrl); 31 try 32 { 33 transport.call(soapAction, envelope); 34 if (envelope.getResponse() != null) 35 { 36 // 获取服务器返回的SOAP消息————接收数据 37 SoapObject result = (SoapObject) envelope.bodyIn; 38 39 //getProperty这个方法相当取中间参数名为soapObject.getName() + "Result"的value,当然也可以按索引取值 40 SoapObject detail = (SoapObject) result.getProperty(soapObject.getName() + "Result"); 41 42 // 解析服务器的SOAP消息 43 int count = detail.getPropertyCount(); 44 for (int i = 0; i < count; i++) 45 { 46 resultList.add(detail.getProperty(i).toString()); 47 } 48 49 }50 }
基本上每行都有注释,就不多废话了。
当然,我这个Webservice传送过来的是一个String。当然,如果对不限XML复杂的话,也可以试试解析解析XML。