天天看點

在Android中調用C#寫的WebService(附源代碼)

由于項目中要使用Android調用C#寫的WebService,于是便有了這篇文章。在學習的過程中,發現在C#中直接調用WebService友善得多,直接添加一個引用,便可以直接使用将WebService當做一個對象使用,利用Vs2010中的代碼提示功能就能爽歪歪地把想要的東西全部點出來。在Android調用,麻煩了一點,但是也還好。主要是我們需要自己在代碼中确定要調用WebService的方法名是什麼,要傳給WebService什麼參數以及對應的參數名,另外,一些額外的資訊比如soap的版本号,也需要了解了。

首先,讓我們先準備一下WebService,WebService的代碼很簡單,一個是傳回HelloWorld字段,另一個是原樣傳回使用者發給WebService的字元串。

在Android中調用C#寫的WebService(附源代碼)
在Android中調用C#寫的WebService(附源代碼)

接着,我們需要下載下傳一個Android中調用WebService的類庫

将下載下傳的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包複制到Eclipse工程的lib目錄中,當然也可以放在其他的目錄裡。同時在Eclipse工程中引用這個jar包。

在Android中調用C#寫的WebService(附源代碼)

(1) 在AdroidManifest.xml中加入權限,<manifest>節點裡面加入下面這句話

(2)、我們在Android中建立兩個按鈕,分别對應WebService中的兩個方法

在Android中調用C#寫的WebService(附源代碼)
在Android中調用C#寫的WebService(附源代碼)
在Android中調用C#寫的WebService(附源代碼)

在Request(…)方法中,我們主要是想實作将WebService中方法名和調用的參數傳入WebService。在這個方法中,主要應用了AsyncTask來處理WebService的調用,因為調用WebService是網絡操作,可能會比較耗時,在Android3.0以上,已經不允許在UI線程直接進行網絡操作,另外,AsyncTask還可以直接更新UI上的控件。

在Android中調用C#寫的WebService(附源代碼)
在Android中調用C#寫的WebService(附源代碼)

我們的重點将放在CallWebService()這個方法中。這個方法裡面封裝了ksoap2類庫裡面調用WebService的一些對象。

(1) 指定webservice的命名空間和調用的方法名,如:

SoapObject類的第一個參數表示WebService的命名空間,可以從WSDL文檔中找到WebService的命名空間。第二個參數表示要調用的WebService方法名。

(2) 設定調用方法的參數值,如果沒有參數,可以省略,設定方法的參數值的代碼如下:

要注意的是,addProperty方法的第1個參數表示調用方法的參數名,該參數值要與服務端的WebService類中的方法參數名一緻,并且參數的順序一緻。

(3) 生成調用Webservice方法的SOAP請求資訊。該資訊由SoapSerializationEnvelope對象描述,代碼為:

建立SoapSerializationEnvelope對象時需要通過SoapSerializationEnvelope類的構造方法設定SOAP協定的版本号。該版本号需要根據服務端WebService的版本号設定。在建立SoapSerializationEnvelope對象後,不要忘了設定SOAPSoapSerializationEnvelope類的bodyOut屬性,該屬性的值就是在第一步建立的SoapObject對象。

注:

(4) 建立HttpTransportsSE對象。通過HttpTransportsSE類的構造方法可以指定WebService的WSDL文檔的URL:

WEB_SERVICE_URL是指WebService的位址,如"http://192.168.0.121:80/testAndroidCall/WebService1.asmx?wsdl"這樣的

(5)使用call方法調用WebService方法,代碼:

Call方法的第一個參數一般為null,第2個參數就是在第3步建立的SoapSerializationEnvelope對象。

(6)使用getResponse方法獲得WebService方法的傳回結果,代碼:

(7)最後,附上完整的CallWebService()方法

在Android中調用C#寫的WebService(附源代碼)
在Android中調用C#寫的WebService(附源代碼)

要運作文章中的代碼,請先将WebService部署在IIS上,要保證Android手機的測試程式和WebService處在同一個區域網路中。

<a href="http://files.cnblogs.com/kissazi2/testWebServiceCall.rar" target="_blank">Android端源代碼</a>

<a href="http://files.cnblogs.com/kissazi2/testAndroidCall.zip" target="_blank">WebService源代碼</a>

本文轉自陳哈哈部落格園部落格,原文連結http://www.cnblogs.com/kissazi2/p/3406662.html如需轉載請自行聯系原作者

kissazi2

繼續閱讀