Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 關於android客戶端使用ksoap2調用wcf(.svc)的總結

關於android客戶端使用ksoap2調用wcf(.svc)的總結

編輯:Android開發實例

 最近需要做一個android的項目調用.net的wcf,第一次做,花了好久,現在總結一下途中的許多問題,供大家參考,避免遇到同樣的問題。

1.首先是遇到的問題是android虛擬機無法上網。

這個問題我弄了一天,不管怎麼調就是不上網,一直瞎調試···後來打開浏覽器發現網頁也打不開,查了一下發現dns配置和自己的電腦的不一樣的原因。

 在cmd-adb shell-setprop net.dns1 自己電腦的dns(詳見上一篇轉載)。

當然,這個不能忘了哈

<uses-permission android:name="android.permission.INTERNET" />

2.實際連接的代碼不多說了,網上有的是,我直接上代碼了,這裡面就是.svc和.asmx的區別了,注釋的是.asmx的soaaction是命名空間+方法名,.svc的soapaction是命名空間+契約名(這個我不是很懂,不知道叫法有沒有問題,歡迎指出錯誤)+方法名。其實很早就實現了連接.asmx後綴的,但是就是實現不了連接.svc的

 

  1. package com.example.wstest1; 
  2.  
  3. import java.io.IOException; 
  4.  
  5. import org.ksoap2.SoapEnvelope; 
  6. import org.ksoap2.SoapFault; 
  7. import org.ksoap2.serialization.SoapObject; 
  8. import org.ksoap2.serialization.SoapSerializationEnvelope; 
  9. import org.ksoap2.transport.HttpTransportSE; 
  10. import org.xmlpull.v1.XmlPullParserException; 
  11.  
  12. import android.app.Activity; 
  13. import android.os.Bundle; 
  14. import android.util.Log; 
  15. import android.widget.TextView; 
  16.  
  17. public class MainActivity extends Activity { 
  18.  
  19.     private final static String TAG = "MainActivity"; 
  20.     // 命名空間 
  21.     private static final String serviceNameSpace = "http://tempuri.org/"; 
  22.     // 方法名稱 
  23.     private static final String methodName = "ReceviceCommand"; 
  24.     // 請求URL 
  25.     private static final String serviceURL = "http://10.14.4.67:3009/ITHmeApp/ITHomeService.svc"; 
  26.     //private static final String serviceURL = "http://10.14.4.67:3009/ITHmeApp/ITHomeService.asmx"; 
  27.     // SoapAction 
  28.     private static final String soapAction = "http://tempuri.org/IITHome/ReceviceCommand"; 
  29.     //private static final String soapAction = "http://tempuri.org/ReceviceCommand"; 
  30.  
  31.     @Override 
  32.     public void onCreate(Bundle savedInstanceState) { 
  33.         super.onCreate(savedInstanceState); 
  34.         setContentView(R.layout.activity_main); 
  35.         TextView t = (TextView) findViewById(R.id.test1); 
  36.         String re = getRequestData(); 
  37.         t.setText(re); 
  38.         Log.e(TAG, re); 
  39.     } 
  40.  
  41.     /** 
  42.      *  
  43.      * @return 
  44.      * @throws IOException 
  45.      * @throws XmlPullParserException 
  46.      */ 
  47.     private String getRequestData() { 
  48.         // 實例化SoapObject對象,指定webService的命名空間以及調用方法的名稱 
  49.         SoapObject request = new SoapObject(serviceNameSpace, methodName); 
  50.         // example方法中有一個String的參數,這裡將“android client”傳遞到example中 
  51.         request.addProperty("inputCommand", "oh"); 
  52.         // 獲得序列化的Envelope 
  53.         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( 
  54.                 SoapEnvelope.VER11); 
  55.         envelope.dotNet = true; 
  56.         envelope.bodyOut = request; 
  57.  
  58.         // Android傳輸對象 
  59.         HttpTransportSE transport = new HttpTransportSE(serviceURL); 
  60.         transport.debug = true; 
  61.  
  62.         // 調用WebService 
  63.         try { 
  64.             transport.call(soapAction, envelope); 
  65.         } catch (IOException e) { 
  66.             // TODO Auto-generated catch block 
  67.             return e.getMessage(); 
  68.         } catch (XmlPullParserException e) { 
  69.             // TODO Auto-generated catch block 
  70.             return e.getMessage(); 
  71.         } 
  72.  
  73.         try { 
  74.             if (envelope.getResponse() != null) { 
  75.                 return envelope.bodyIn.toString(); 
  76.             } 
  77.         } catch (SoapFault e) { 
  78.             // TODO Auto-generated catch block 
  79.             return e.getMessage(); 
  80.         } 
  81.  
  82.         return null; 
  83.     } 

 

3,這是核心問題了,糾結了好幾天的問題,報錯unterminated entity ref (position:TEXT

這個問題在連接.asmx完全不存在,但是連接.svc就是怎麼也找不到,然後找了一下國外的論壇終於發現,原來,是ksoap2版本的問題,我用的是最新的2.6.5,但是不知是2.6.5一個bug還是其他什麼原因,需要換成2.5.7的,坑爹啊````

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved