Exemplarische Vorgehensweise: Aufrufen von XML-Webdiensten in Windows Forms

Aktualisiert: November 2007

XML-Webdienste sind ein Feature von Visual Studio, das es Ihnen ermöglicht, Anwendungen zu entwickeln, mit denen Meldungen in einer locker gekoppelten Umgebung mithilfe von Standardprotokollen wie HTTP, XML, XSD, SOAP und WSDL ausgetauscht werden können. Die Meldungen können strukturiert und typisiert oder lose definiert sein. Da das Webdienste-Feature auf Standardprotokollen basiert, können Webdienstanwendungen mit einer Vielzahl von Implementierungen, Plattformen und Geräten kommunizieren. Weitere Informationen finden Sie unter Webdienste in verwaltetem Code.

Sie können Webdienste verwenden, um die Funktionalität von Windows Forms zu verbessern. Windows Forms mit Webdiensten zu verbinden, ist genauso einfach wie das Aufrufen von Webdienstmethoden, die auf einem Server ausgeführt werden, der anschließend die Ergebnisse des Methodenaufrufs zurückgibt.

Es gibt zwei Arten von Webdienstmethoden: synchrone und asynchrone. Wenn synchrone Webdienstmethoden aufgerufen werden, wartet der Aufrufer, bis der Webdienst reagiert, und fährt erst dann mit seinen Operationen fort. Wenn asynchrone Webdienstmethoden aufgerufen werden, können Sie den aufrufenden Thread auch verwenden, während Sie darauf warten, dass der Webdienst reagiert. Dadurch werden die vorhandenen Threads in der Clientanwendung effektiv genutzt. Weitere Informationen über das Arbeiten mit synchronen und asynchronen Webdienstmethoden finden Sie unter Zugriff auf Webdienste in verwaltetem Code.

Synchrone Webdienstmethoden

Beim Aufruf einer synchronen Webdienstmethode wird die Methode aufgerufen und anschließend auf die Verarbeitung auf dem Server gewartet. Nachdem ein Wert zurückgegeben wurde, wird der restliche Code im Windows Form ausgeführt.

So erstellen Sie einen XML-Webdienst

  1. Erstellen Sie eine Webdienstanwendung. Weitere Informationen finden Sie unter Erstellen von Webdiensten in verwaltetem Code.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die ASMX-Datei, und wählen Sie Code anzeigen.

  3. Erstellen Sie eine Webdienstmethode für Additionen. Im folgenden Codebeispiel wird eine Webdienstmethode gezeigt, die zwei ganze Zahlen addiert und anschließend die Summe zurückgibt.

    <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. Erstellen Sie eine weitere Webdienstmethode für Multiplikationen. Im folgenden Codebeispiel wird eine Webdienstmethode gezeigt, die zwei ganze Zahlen multipliziert und anschließend das Produkt zurückgibt.

    <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. Wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus. Sie können auch zu der in diesem Projekt erstellten ASMX-Datei navigieren, um mehr über Webdienste zu erfahren. Der Webdienst kann nun in einem Windows Form aufgerufen werden.

So rufen Sie einen XML-Webdienst synchron auf

  1. Erstellen Sie eine neue Windows-basierte Anwendung. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Windows-Anwendungsprojekts.

    Sicherheitshinweis:

    Aufrufe von Webmethoden erfordern eine Berechtigungsebene, die von der WebPermission-Klasse erteilt wird. Wenn die Ausführung in einer teilweise vertrauenswürdigen Umgebung erfolgt, kann der Vorgang eine Ausnahme auslösen. Weitere Informationen finden Sie unter Grundlagen der Codezugriffssicherheit.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Verweise des Projekts, und klicken Sie anschließend auf Webverweis hinzufügen.

    Das Dialogfeld Webverweis hinzufügen wird geöffnet.

  3. Geben Sie den folgenden Webdienst-URI in das Feld Adresse ein, und drücken Sie die EINGABETASTE:

    https://localhost/WebService1/Service1.asmx
    

    Hierbei handelt es sich um den URI des Webdienstes, den Sie in der vorhergehenden Prozedur erstellt haben. Die Webmethoden WebAdd und WebMultiply werden im linken Bereich des Dialogfelds Webverweis hinzufügen angezeigt.

  4. Klicken Sie auf Verweis hinzufügen.

  5. Fügen Sie über die Toolbox drei TextBox-Steuerelemente und zwei Button-Steuerelemente hinzu. Die Textfelder werden für die numerischen Werte und die Schaltflächen für die Berechnungen sowie zum Aufrufen der Webdienstmethoden verwendet.

  6. Legen Sie die Eigenschaften der Steuerelemente wie folgt fest:

    Steuerelement

    Eigenschaft

    Text

    TextBox1

    Text

    0

    TextBox2

    Text

    0

    TextBox3

    Text

    0

    Button1

    Text

    Addieren

    Button2

    Text

    Multiplizieren

  7. Klicken Sie mit der rechten Maustaste auf das Formular, und wählen Sie Code anzeigen.

  8. Erstellen Sie eine Instanz des Webdienstes als Klassenmember. Sie benötigen den Namen des Servers, auf dem Sie den obigen Webdienst erstellt haben.

    ' 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. Erstellen Sie einen Ereignishandler für das Click-Ereignis von Button1. Ausführliche Informationen finden Sie unter Gewusst wie: Erstellen von Ereignishandlern mithilfe des Designers.

    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#) Fügen Sie den folgenden Code im Konstruktor des Formulars ein, um den Ereignishandler zu registrieren.

    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. Erstellen Sie auf dieselbe Weise einen Ereignishandler für das Click -Ereignis von Button2, und fügen Sie folgenden Code hinzu:

    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#) Fügen Sie den folgenden Code im Konstruktor des Formulars ein, um den Ereignishandler zu registrieren.

    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. Drücken Sie F5, um die Anwendung auszuführen.

  12. Geben Sie Werte in die beiden ersten Textfelder ein. Wenn Sie auf die Schaltfläche Addieren klicken, wird im dritten Textfeld die Summe der beiden Werte angezeigt. Wenn Sie auf die Schaltfläche Multiplizieren klicken, wird im dritten Textfeld das Produkt der beiden Werte angezeigt.

    Hinweis:

    Beim ersten Aufruf eines Webdienstes dauert die Verarbeitung auf dem Server einige Zeit, da der Webdienst auf dem Server instanziiert wird. Dies sollten Sie berücksichtigen, wenn Sie auf eine Schaltfläche in der Anwendung klicken. Diese Verzögerung wird im folgenden Abschnitt behandelt.

Nächste Schritte

Beim Aufruf von asynchronen Webdienstmethoden wird die Anwendung ausgeführt, während auf die Antwort des Webdienstes gewartet wird. Dadurch werden die Ressourcen in der Clientanwendung effektiv genutzt.

Weitere Informationen finden Sie unter Gewusst wie: Asynchrones Zugreifen auf einen Webdienst in verwaltetem Code.

Siehe auch

Aufgaben

Gewusst wie: Binden an einen Webdienst mithilfe der BindingSource in Windows Forms

Konzepte

Auswählen zwischen Windows Forms und Web Forms

Webverweise in Visual Studio

Gewusst wie: Generieren eines Webdienstproxys

Weitere Ressourcen

Zugriff auf Webdienste in verwaltetem Code

Webdienste in verwaltetem Code