一,服務器端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進入驗證如下圖
輸入name和password(注意之前定義的正確的驗證是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的類型的(java,PHP,dotNet)
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()的方式接受返回值是出現程序崩潰現象,接待解決,請各位大嬸指教
到此整個服務器端和客戶端的代碼和部署就全部完成了,代碼很少,示例很小,但畢竟是花了自己幾天時間摸索出來的貼出來求指教。