Android客戶端用戶在線驗證附帶webservice的部署

     Android客戶端的在線驗證,登陸是很多需要保密的應用程序的必要環節,本人菜鳥經過幾天的摸索,終於完成的小小的程序:通過Android客戶端調用webservice。具體步驟寫出共同交流學習。由於本人也是菜鳥,在這之前完全沒學過webservice,代碼很簡單。


一,服務器端webservice的建立

沒了客戶端發佈的程序,哪來的調用,所以服務器端的程序少不了,客戶端的代碼只有幾句,只是小小的驗證並返回我們需要的結果

這裏我選用了visual stuio 2010 (VS)版本,網上有很多教程可以參考

由於我們調用的是webservice服務,打開VS通過文件——新建——網站

在出現的新建網站對話框中按所需語言(這裏選C#)選擇,並選擇ASP.NET網站(圖1

注意.NET版本的選擇(版本的影響自己搜),web位置的填寫

 

網站建立好後,我們給項目添加一個新項(如下圖2)並重新命名爲webservice.asmx

2

 

打開新建項,其他的先不要管,按照原有的HelloWorld方法建立自己所需方法,這裏是一個簡單的用戶驗證,代碼就這麼多,(單個用戶的驗證夠了)(圖3

3

保存好之後,回頭分析一下里面的內容,裏面有之後要用到的內容

[WebService(Namespace ="http://tempuri.org/")]這個是本項目的命名空間,由於只是測試,命名空間不規範,另外還有所需的方法名Login(String,String);

到這一個簡單的webservice項目就已經建立完成了

 

 

二、將 webservice項目部署到服務器的IIS

這裏所用的服務器是windows server 2008

打開Internet信息服務(IIS)管理器(圖4


在右邊選項欄中由選網站——新建網站——配置網站的默認文件地址,端口等,配置如下圖5

 

這裏的網站是Test,然後選中已經建立好的網站右擊選擇添加虛擬目錄,命名一個別名(這裏用Usercheck),物理路徑選擇你之前寫好的webwervice項目的所在目錄。

之後更該默認文檔爲WebService2.asmx,最後將你添加的虛擬目錄轉換爲應用程序。

現在就可以進行一下驗證了,單擊右邊選項欄中的瀏覽可以在瀏覽器中查看

我們之前寫的方法出現了 helloworld是建立網站項目的時候自帶的沒刪除,login是我們自己寫的小示例,點擊login進入驗證如下圖

 

 

輸入namepassword(注意之前定義的正確的驗證是admin&123)進行驗證。點擊嚴重頁面跳轉出現返回值

 

好了 服務器端的程序已經完成了,例子很簡單,代碼不多,主要是對於webservice的建立與部署。

 

三、android客戶端的調用

 

客戶端的程序很簡單,佈置了兩個Activity,第一個Activity是登陸界面,第二個是完成登陸驗證後的跳轉界面(注意兩個Activity都要在配置文件中說明),佈局如下圖,佈局代碼就不貼了 很簡單.但有一點很重要 一定要引入第三方的jar包 Ksoap2-android-**** ,這個在網上可以下載


核心代碼如下 主要出現的問題是要注意返回值的類型,代碼中有註釋說明,目前還有問題沒解決

 

      **      

      StringNAMESPACE=http://tempuri.org/;//看到沒 在服務器端寫的網站項目的命名空間在這用到了,

      StringMETHOD_NAME="login";//要調用的方法,必須和服務器端寫的方法一致

      StringURL=http://192.168.***.***:180/Usercheck/UserService.asmx;

      **        

          *     

          //指定WebService的命名空間和調用的方法名

          SoapObject request =new SoapObject(NAMESPACE,METHOD_NAME);             

          //處理soap12:Body數據部分

          request.addProperty("name", userName);

          request.addProperty("password", password);

             

          //SoapEnvelope.VER11表示使用的soap協議的版本號 1.1 或者是1.2

          SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(SoapEnvelope.VER11);

          envelope.bodyOut = request;

          envelope.dotNet =true;//指定webservice的類型的(javaPHPdotNet

          envelope.setOutputSoapObject(request);

 

          HttpTransportSE ht =new HttpTransportSE(URL);

          ht.debug =true; 

          try { 

             //訪問webservice服務器

             ht.call(NAMESPACE+METHOD_NAME, envelope);

             

             /*

              *不同的接收方式其得到的返回值不同,

              *若用SoapObject object=(SoapObject) envelope.bodyIn;其返回值格式是:   loginResponse{loginResult=1;}

              *若用Object object=(Object)envelope.getResponse();其返回值格式是: 1

              *若用SoapObject object=(SoapObject)envelope.getResponse()出現程序崩潰現象  待解決

              * */

//           object=(SoapObject) envelope.bodyIn;

//           object=(SoapObject)envelope.getResponse();

             object=(Object)envelope.getResponse();

             

          }catch (Exception e) {           

             e.printStackTrace();           

          }         

          loginStateStr=object.toString();         

          returnloginStateStr;   

          /*

           *之後就是對返回結果值得解析,並進行相應的處理

           */

    

  

以上就是客戶端的代碼,目前還有一個問題是SoapObject object=(SoapObject)envelope.getResponse()的方式接受返回值是出現程序崩潰現象,接待解決,請各位大嬸指教


到此整個服務器端和客戶端的代碼和部署就全部完成了,代碼很少,示例很小,但畢竟是花了自己幾天時間摸索出來的貼出來求指教。


發佈了12 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章