Procédure pas à pas : appel à des services Web XML à partir de Windows Forms

Mise à jour : novembre 2007

Les services Web XML constituent une fonctionnalité de Visual Studio qui permet de développer des applications et d'échanger des messages dans un environnement faiblement couplé à l'aide de protocoles standard tels que HTTP, XML, XSD, SOAP et WSDL. Les messages peuvent être structurés et typés ou faiblement définis. Comme les services Web s'appuient sur des protocoles standard, vos applications de service Web peuvent communiquer avec une grande diversité d'implémentations, de plateformes et de périphériques. Pour plus d'informations, consultez Services Web en code managé.

Vous pouvez utiliser des services Web pour améliorer les fonctionnalités des Windows Forms. La connexion des Windows Forms aux services Web se résume à de simples appels à des méthodes Web Service. Ces dernières sont traitées sur un serveur qui retourne ensuite les résultats de l'appel de méthode.

Il existe deux types de méthodes de service Web : synchrone et asynchrone. Lorsque des méthodes Web Service synchrones sont appelées, l'appelant attend que le service Web réponde avant de poursuivre ses opérations. Lorsque des méthodes Web Service asynchrones sont appelées, vous pouvez continuer d'utiliser le thread d'appel en attendant que le service Web réponde. Cela vous permet d'utiliser efficacement l'ensemble des threads existants dans l'application cliente. Pour plus d'informations sur la façon d'utiliser les méthodes de service Web synchrones et asynchrones, consultez Accès aux services Web en code managé.

Méthodes Web Service synchrones

Un appel à une méthode Web Service synchrone consiste à appeler la méthode et à attendre que le calcul ait lieu sur le serveur et qu'une valeur soit retournée avant de continuer avec le reste du code dans le Windows Form.

Pour créer un service Web XML

  1. Créez une application de service Web. Pour plus d'informations, consultez Création de services Web en code managé.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier .asmx et choisissez Afficher le code.

  3. Créez une méthode Web Service qui effectue une addition. L'exemple de code suivant affiche une méthode de service Web qui prend deux entiers et les additionne, en retournant la somme.

    <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. Créez une autre méthode Web Service qui effectue une multiplication. L'exemple de code suivant affiche une méthode de service Web qui prend deux entiers et les multiplie, en retournant le produit.

    <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. Dans le menu Générer, cliquez sur Générer la solution. Vous pouvez également localiser le fichier .asmx que vous avez créé dans ce projet pour en savoir plus sur les services Web. Votre service Web peut désormais être appelé à partir d'un Windows Form.

Pour appeler un service Web XML de manière synchrone

  1. Créez une nouvelle application Windows. Pour plus d'informations, consultez Comment : créer un projet d'application Windows.

    Note de sécurité :

    Les appels aux méthodes Web requièrent un niveau de privilège accordé par la classe WebPermission. Dans un contexte où le niveau de confiance n'est pas total, le processus peut lever une exception. Pour plus d'informations, consultez Notions fondamentales de la sécurité d'accès du code.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud Références du projet, puis cliquez sur Ajouter une référence Web.

    La boîte de dialogue Ajouter une référence Web s'ouvre.

  3. Tapez l'URI de service Web suivant dans la zone de l'adresse, puis appuyez sur ENTRÉE :

    https://localhost/WebService1/Service1.asmx
    

    Il s'agit de l'URI du service Web créé au cours de la procédure précédente. Les méthodes Web Service WebAdd et WebMultiply s'affichent dans le volet de gauche de la boîte de dialogue Ajouter une référence Web.

  4. Cliquez sur Ajouter une référence.

  5. Dans la Boîte à outils, ajoutez trois contrôles TextBox et deux contrôles Button. Les zones de texte seront réservées pour les nombres et les boutons seront utilisés pour effectuer les calculs et appeler les méthodes Web Service.

  6. Définissez les propriétés suivantes des contrôles :

    Contrôle

    Propriété

    Texte

    TextBox1

    Text

    0

    TextBox2

    Text

    0

    TextBox3

    Text

    0

    Button1

    Text

    Add

    Button2

    Text

    Multiplier

  7. Cliquez avec le bouton droit sur le formulaire et choisissez Afficher le code.

  8. Créez une instance du service Web en tant que membre de la classe. Vous devez connaître le nom du serveur où vous avez créé le service Web précédent.

    ' 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. Créez un gestionnaire d'événements pour l'événement Click de Button1. Pour plus d'informations, consultez Comment : créer des gestionnaires d'événements à l'aide du concepteur.

    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#) Placez le code suivant dans le constructeur du formulaire pour inscrire le gestionnaire d'événements.

    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. Créez de la même manière un gestionnaire d'événements pour l'événement Click de Button2, puis ajoutez le code suivant.

    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#) Placez le code suivant dans le constructeur du formulaire pour inscrire le gestionnaire d'événements.

    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. Appuyez sur F5 pour exécuter l'application.

  12. Entrez des valeurs dans les deux premières zones de texte. Lorsque vous appuyez sur le bouton Ajouter, la troisième zone de texte doit afficher la somme de ces deux valeurs. Lorsque vous appuyez sur le bouton Multiplier, la troisième zone de texte doit afficher le produit de ces deux valeurs.

    Remarque :

    Le traitement, par le serveur, du premier appel à un service Web prend un certain temps, car le service Web est instancié sur le serveur. Gardez ce point présent à l'esprit lorsque vous appuyez sur les boutons dans votre application. Ce décalage est traité dans la section suivante.

Étapes suivantes

Lorsque vous appelez des méthodes Web Service asynchrones, l'application continue de s'exécuter en attendant que le service Web réponde. Cela vous permet d'utiliser efficacement les ressources dans l'application cliente.

Pour plus d'informations, consultez Comment : accéder de manière asynchrone à un service Web en code managé.

Voir aussi

Tâches

Comment : établir une liaison à un service Web à l'aide du BindingSource Windows Forms

Concepts

Comment choisir entre Windows Forms et Web Forms

Références Web dans Visual Studio

Comment : générer un proxy de service Web

Autres ressources

Accès aux services Web en code managé

Services Web en code managé