逐步解說:由 Windows Form 呼叫 XML Web Service
更新:2007 年 11 月
XML Web Service 是 Visual Studio 的一個功能,可讓您開發能夠在鬆散結合的環境中使用標準通訊協定 (例如 HTTP、XML、XSD、SOAP 和 WSDL) 交換訊息的應用程式。訊息可經過結構化、輸入或彈性定義。因為 Web 服務功能是以標準的通訊協定為基礎,因此,Web 服務應用程式可與各式各樣之實作、平台和裝置進行通訊。如需詳細資訊,請參閱以 Managed 程式碼建立的 Web 服務。
您可以使用 Web 服務增強 Windows Form 的功能。將 Windows Form 連結至 Web 服務是一件很簡單的事,只要呼叫 Web 服務方法,伺服器端處理後會傳回方法呼叫的結果。
Web 服務方法有兩種類型:同步和非同步。呼叫同步的 Web 服務方法時,呼叫端在繼續作業之前,會等待 Web 服務回應。呼叫非同步的 Web 服務方法時,在呼叫端等待 Web 服務回應的同時,可以繼續使用呼叫的執行緒。這種方式讓您可以有效率地使用用戶端應用程式中現有的執行緒集。如需使用同步和非同步 Web 服務方法的詳細資訊,請參閱以 Managed 程式碼存取 Web 服務。
同步 Web 服務方法
呼叫同步的 Web 服務方法包括:呼叫方法,以及在繼續執行 Windows Form 中其餘的程式碼之前,等待伺服器完成計算和傳回值。
若要建立 XML Web Service
建立 Web 服務應用程式。如需詳細資訊,請參閱以 Managed 程式碼建立 Web 服務。
在 [方案總管] 中,以滑鼠右鍵按一下 .asmx 檔案,並選擇 [檢視程式碼]。
建立執行加法的 Web 服務方法。下列程式碼範例示範了一個 Web 服務方法,它會取得兩個整數並進行加法計算而傳回總和。
<WebMethod()> Public Function WebAdd(ByVal x As Integer, ByVal y As Integer) As Integer Return x + y End Function
[WebMethod] public int WebAdd(int x, int y) { return x + y; }
/** @attribute WebMethod() */ public int WebAdd(int x, int y) { return x + y; }
建立另一個執行乘法的 Web 服務方法。下列程式碼範例示範了一個 Web 服務方法,它會取得兩個整數並進行乘法計算而傳回乘積。
<WebMethod()> Public Function WebMultiply(ByVal x As Integer, ByVal y As Integer) As Integer Return x * y End Function
[WebMethod] public int WebMultiply(int x, int y) { return x * y; }
/** @attribute WebMethod() */ public int WebMultiply(int x, int y) { return x * y; }
從 [建置] 功能表中,選擇 [建置方案]。您也可以瀏覽至您在此專案中建立的 .asmx 檔案,以便了解有關 Web 服務的詳細資訊。您現在就可以從 Windows Form 中呼叫您的 Web 服務了。
若要同步呼叫 XML Web Service
建立新的 Windows 架構應用程式。如需詳細資訊,請參閱 HOW TO:建立 Windows 應用程式專案。
安全性注意事項: 對 Web 方法進行呼叫需要具有由 WebPermission 類別所授與的特殊權限等級。如果您正在部分信任的內容中執行動作,處理序可能會擲回例外狀況。如需詳細資訊,請參閱程式碼存取安全性的基本概念。
在 [方案總管] 中,以滑鼠右鍵按一下專案的 [參考] 節點,再按一下 [加入 Web 參考]。
[加入 Web 參考] 對話方塊隨即開啟。
在 [位址] 方塊中,輸入下列 Web 服務的 URI,然後按 ENTER 鍵:
https://localhost/WebService1/Service1.asmx
這是您在前面程序中所建立之 Web 服務的 URI。WebAdd 和 WebMultiply Web 方法會出現在 [加入 Web 參考] 對話方塊的左邊窗格中。
按一下 [加入參考]。
從 [工具箱] 加入三個 TextBox 控制項和兩個 Button 控制項。文字方塊將用來輸入數字,而按鈕是用來計算和呼叫 Web 服務方法。
將這些控制項的屬性設定如下:
控制項
屬性
文字
TextBox1
Text
0
TextBox2
Text
0
TextBox3
Text
0
Button1
Text
Add
Button2
Text
Multiply
在表單上按一下滑鼠右鍵,並選擇 [檢視程式碼]。
建立 Web 服務的執行個體,做為類別的成員。您必須知道建立先前 Web 服務時所在的伺服器名稱。
' Replace localhost below with the name of the server where ' you created the Web service. Dim MathServiceClass As New localhost.Service1()
localhost.Service1 MathServiceClass = new localhost.Service1();
localhost.Service1 MathServiceClass = new localhost.Service1();
為 Button1 的 Click 事件建立事件處理常式。如需詳細資訊,請參閱 HOW TO:使用設計工具建立事件處理常式。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y) TextBox3.Text = z.ToString End Sub
private void button1_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.Text = z.ToString(); }
(Visual C#) 將下列程式碼加入表單的建構函式以註冊事件處理常式。
this.button1.Click += new System.EventHandler(this.button1_Click); private void button1_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebAdd(x, y); textBox3.set_Text(""+z); }
為 Button2 的 Click 事件建立同樣的事件處理常式,並加入下列的程式碼。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Create instances of the operands and result. Dim x, y, z As Integer ' Parse the contents of the text boxes into integers. x = Integer.Parse(TextBox1.Text) y = Integer.Parse(TextBox2.Text) ' Call the WebMultiply Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y) TextBox3.Text = z.ToString End Sub
private void button2_Click(object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = int.Parse(textBox1.Text); y = int.Parse(textBox2.Text); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.Text = z.ToString(); }
(Visual C#) 將下列程式碼加入表單的建構函式以註冊事件處理常式。
this.button2.Click += new System.EventHandler(this.button2_Click); private void button2_Click (Object sender, System.EventArgs e) { // Create instances of the operands and result. int x, y, z; // Parse the contents of the text boxes into integers. x = Integer.parseInt(textBox1.get_Text()); y = Integer.parseInt(textBox2.get_Text()); // Call the WebAdd Web service method from the instance of the Web service. z = MathServiceClass.WebMultiply(x, y); textBox3.set_Text(""+z); }
請按 F5 執行您的應用程式。
在前兩個文字方塊中輸入值。當您按下 [Add] 按鈕時,第三個文字方塊會顯示其總和。當您按下 [Multiply] 按鈕時,第三個文字方塊會顯示其乘積。
注意事項: 第一次呼叫 Web 服務時,由於 Web 服務是在伺服器端產生,所以在伺服器處理時需等待一會兒。當您按下應用程式中的按鈕時請記得這一點。有關此延遲在下個段落中會說明如何處理。
後續步驟
當您呼叫非同步的 Web 服務方法時,在等待 Web 服務回應時,應用程式仍會繼續執行。這可讓您有效地使用用戶端應用程式的資源。
如需詳細資訊,請參閱 HOW TO:以 Managed 程式碼非同步存取 Web 服務。
請參閱
工作
HOW TO:使用 Windows Form BindingSource 繫結至 Web 服務
概念
在 Windows Form 和 Web Form 之間選擇