天天看點

在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

繼續閱讀