共用方式為


逐步解說:由 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

  1. 建立 Web 服務應用程式。如需詳細資訊,請參閱以 Managed 程式碼建立 Web 服務

  2. 在 [方案總管] 中,以滑鼠右鍵按一下 .asmx 檔案,並選擇 [檢視程式碼]。

  3. 建立執行加法的 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;
    }
    
  4. 建立另一個執行乘法的 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;
    }
    
  5. 從 [建置] 功能表中,選擇 [建置方案]。您也可以瀏覽至您在此專案中建立的 .asmx 檔案,以便了解有關 Web 服務的詳細資訊。您現在就可以從 Windows Form 中呼叫您的 Web 服務了。

若要同步呼叫 XML Web Service

  1. 建立新的 Windows 架構應用程式。如需詳細資訊,請參閱 HOW TO:建立 Windows 應用程式專案

    安全性注意事項:

    對 Web 方法進行呼叫需要具有由 WebPermission 類別所授與的特殊權限等級。如果您正在部分信任的內容中執行動作,處理序可能會擲回例外狀況。如需詳細資訊,請參閱程式碼存取安全性的基本概念

  2. 在 [方案總管] 中,以滑鼠右鍵按一下專案的 [參考] 節點,再按一下 [加入 Web 參考]。

    [加入 Web 參考] 對話方塊隨即開啟。

  3. 在 [位址] 方塊中,輸入下列 Web 服務的 URI,然後按 ENTER 鍵:

    https://localhost/WebService1/Service1.asmx
    

    這是您在前面程序中所建立之 Web 服務的 URI。WebAdd 和 WebMultiply Web 方法會出現在 [加入 Web 參考] 對話方塊的左邊窗格中。

  4. 按一下 [加入參考]。

  5. 從 [工具箱] 加入三個 TextBox 控制項和兩個 Button 控制項。文字方塊將用來輸入數字,而按鈕是用來計算和呼叫 Web 服務方法。

  6. 將這些控制項的屬性設定如下:

    控制項

    屬性

    文字

    TextBox1

    Text

    0

    TextBox2

    Text

    0

    TextBox3

    Text

    0

    Button1

    Text

    Add

    Button2

    Text

    Multiply

  7. 在表單上按一下滑鼠右鍵,並選擇 [檢視程式碼]。

  8. 建立 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();
    
  9. 為 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);
    }
    
  10. 為 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);
    }
    
  11. 請按 F5 執行您的應用程式。

  12. 在前兩個文字方塊中輸入值。當您按下 [Add] 按鈕時,第三個文字方塊會顯示其總和。當您按下 [Multiply] 按鈕時,第三個文字方塊會顯示其乘積。

    注意事項:

    第一次呼叫 Web 服務時,由於 Web 服務是在伺服器端產生,所以在伺服器處理時需等待一會兒。當您按下應用程式中的按鈕時請記得這一點。有關此延遲在下個段落中會說明如何處理。

後續步驟

當您呼叫非同步的 Web 服務方法時,在等待 Web 服務回應時,應用程式仍會繼續執行。這可讓您有效地使用用戶端應用程式的資源。

如需詳細資訊,請參閱 HOW TO:以 Managed 程式碼非同步存取 Web 服務

請參閱

工作

HOW TO:使用 Windows Form BindingSource 繫結至 Web 服務

概念

在 Windows Form 和 Web Form 之間選擇

Visual Studio 中的 Web 參考

HOW TO:產生 Web 服務 Proxy

其他資源

以 Managed 程式碼存取 Web 服務

以 Managed 程式碼建立的 Web 服務