基于Ksoap2调用Web service服务

  最近做一个项目,中间有用到Android端使用Asp.Net写的Webservice。用了比较常用的Ksoap2类库。可以通过下面地址下载

 http://code.google.com/p/ksoap2-android/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+Size+DownloadCount

在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。

原文地址:https://www.cnblogs.com/HTWorking/p/Webservice.html