從Visual Studio.Net2003開始,微軟的.Net開發平台就吸引了很多的編程的專業人員和愛好者。當微軟的Visual Studio.Net2005一面世,世界為之再次一驚,真的可以說是“取其精華,去其糟粕”了。當然新的成長也會帶來新的問題,但是總體來說是在前進著的。好了,廢話也不多說了,來用這個非常方便的.Net平台來開發這個Demo吧!
我們在《Web服務初探:用Demo學Web服務系列(2)——編寫一簡單的Web服務》已經開發出了一個簡單的WebService,名為MyServiceClass。在這個隨筆中,我們就來講解如何調用這個外部的WebService(有的地方也把外部的WebService叫做遠端WebService)。
下面是我的開發環境配置:
作業系統:WindowsXP(已安裝了IIS)
開發工具:Microsoft Visual Studio.Net2005
開發所用語言:Visual C#
這裡我們假設您已經剛剛建立好了一個Windows應用程式工程,其名稱為“WindowsPro”,並將工程中預設的表單名稱“Form1”改為“Login.cs”,那麼Login表單的其他屬性如下(需要更改的屬性):
BackColor = 0, 192, 192;(Name) = Login;FormBorderStyle = FixedSingle;MaximizeBox = False;MinimizeBox = False;StartPosition = CenterScreen,然後在表單上放置三個Label、兩個TextBox和兩個Button,分別設定其屬性後,如:下面就是一個關鍵區段了,右擊工程名稱選擇“添加Web引用”,在彈出的視窗中選擇“本機電腦的Web服務”後,會列出所有在您電腦上能找的WebService,選擇並點擊上一篇隨筆中定義的MyServiceClass,在新出的視窗中將Web引用名更改為“MyServ”,點擊“添加引用”。這樣在工程的Web References檔案夾中會添加一個MyServiceClass的代理,名為“MyServ”。
添加完WebService的代理後,我們就可以在程式中使用了,下面看看上面表單的代碼如下: 1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9namespace WindowsPro
10{
11 public partial class Login : Form
12 {
13 public Login()
14 {
15 InitializeComponent();
16 }
17
18 private void Btn_Login_Click(object sender, EventArgs e)
19 {
20 MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();
21 bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);
22 if (LoginOK)
23 {
24 MessageBox.Show("使用者名稱和密碼正確!");
25 }
26 else
27 {
28 MessageBox.Show("使用者名稱和密碼錯誤!");
29 }
30 }
31
32 private void Btn_Close_Click(object sender, EventArgs e)
33 {
34 this.Close();
35 }
36 }
37}
其中的第18行“MyServ.MyServiceClass MyWebServ = new MyServ.MyServiceClass();”是實列化MyServiceClass代理類,以便在下面的代碼中調用MyServiceClass中的方法,在第21行“bool LoginOK = MyWebServ.Login(this.tB_UserName.Text, this.tB_PassWord.Text);”中調用了MyServiceClass中的Login方法,MyWebServ產生Soap訊息後發送到伺服器端驗證所輸入的使用者名稱和密碼是否正確,並返回結果。大家可以運行一下這個程式,輸入正確的使用者名稱“Micky”和密碼“micky0”測試一下,再輸入一個其他的使用者名稱和密碼測試一下。
這裡簡要解釋一下調用機制:Login方法中的兩個參數(從this.tB_UserName.Text和this.tB_PassWord.Text中獲得)通過MyServiceClass的代理類MyServ產生一個Soap訊息,將這個Soap訊息通過Http協議發送給伺服器端的MyServiceClass,而伺服器端的MyServiceClass解析Soap訊息後調用相應的方法執行,並將方法返回的值再由MyServiceClass產生一個Soap訊息通過Http協議發送給調用的用戶端,當調用的用戶端MyServiceClass的代理類MyServ接受到這個訊息,解析出裡面返回的值,賦值給變數bool LoginOK。
由上面說的可以看出我們必須知道每個調用的方法所要傳入的參數類型和方法所要傳回值的類型。
今天我們通過一個Windows應用程式的使用者登入視窗實現了一個簡單的C/S程式調用WebService。下一篇隨筆我們還是要用到MyServiceClass這個服務,並將修改其中的Login方法,再來講解使用此應用程式如何再次調用修改後的MyServiceClass服務。
註:在《Web服務初探:用Demo學Web服務系列(2)——編寫一簡單的Web服務》的評論中, TheOLD(遠古) 曾提出要求增加講解Web Services的原理,在此我對他表示感謝。經過我的考慮,我會在《系列》後面的一個或多個專門的隨筆中講解XML的基本知識、Soap訊息的結構以及Web Services和Soap訊息的關聯。因為《系列》的主旨是初探,並是用的Demo,也就是應用為主,所以在這裡我沒有過多的去說出我所理解的一些不是很全的原理。並且有些知識我可能也不是很清楚,還希望能和大家多多交流。