Oct 29

A) Le service

1) Ouvrir Visual Studio et créer un nouveau projet : Application du service WCF et nommer le projet UsersServices.

2) Supprimer les fichiers IService1.cs et Service1.svc

3)  Créer une simple base de données. Clique droit sur le dossier App_Data et ajouter un nouvel élément.

Sélectionner Base de données SQL Server et la nommer DataBase.mdf. Ouvrir la table en double cliquant dessus. Puis aller dans l’explorateur de serveurs pour y ajouter une table. Clique droit sur tables, ajouter une nouvelle table avec les champs suivant :

-          Id de type int, non null et IsIdentity (auto Incrémenté)

-          Nom de type varchar(50)

-          Prénom de type varchar(50)

Enregistrer cette table sous le nom Users.

4) Ajouter un WCF service à l’application. Clique droit sur le projet, ajouter un nouvel élément, Service WCF puis le nommer UsersService. Plusieurs fichiers ont étés créés.

5)  Ajouter la chaine de connexion au fichier web.config. L’ouvrir puis ajouter cette ligne dans la balise ConnectionStrings:

<connectionStrings>

 <add name="UsersConnectionString"

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase.mdf; Integrated Security=True;User Instance=True"

providerName="System.Data.SqlClient"/>

</connectionStrings>

6) Ouvrir le fichier IUsersService.cs et ajouter un Contrat de données

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;;

namespace UsersServices

{

    [DataContract]

    public class User

    {

        [DataMember]

        public int UserId { get; set; }

 

        [DataMember]

        public string UserName { get; set; }

 

        [DataMember]

        public string UserFirstName { get; set; }

    }

}

7) Ajouter l’interface de la classe User

[ServiceContract]

    public interface IUsersService

    {

        [OperationContract]

        User GetUser(int userId);

 

        [OperationContract]

        void SaveUser(User user);

    }

 

IUsersService.cs doit ressembler à ceci :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace UsersServices

{

    [DataContract]

    public class User

    {

        [DataMember]

        public int UserId { get; set; }

 

        [DataMember]

        public string UserName { get; set; }

 

        [DataMember]

        public string UserFirstName { get; set; }

    }

 

    [ServiceContract]

    public interface IUsersService

    {

        [OperationContract]

        User GetUser(int userId);

 

        [OperationContract]

        void SaveUser(User user);

    }

}

8) Ouvrir le fichier UsersService.svc et rajouter les using suivants :

-          System.Data

-          System.Data.SqlClient

-          System.Configuration

Ajouter le code permettant d’établir la connexion à la base et implémenter les méthodes GetUser et SaveUser. (Pour avoir le squelette des méthodes, Clique droit sur IUsersService puis sur implémenter l’interface dans :  public class UsersService : IUsersService

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

using System.Data;

using System.Data.SqlClient;

using System.Configuration;

 

namespace UsersServices

{

    public class UsersService : IUsersService

    {

        private string _connectionString = ConfigurationManager.ConnectionStrings["UsersConnectionString"].ToString();

 

        public User GetUser(int userId)

        {

            string strSql = "SELECT Id, Nom, Prenom FROM users WHERE (Id=@userId)";

 

            SqlConnection connect = new SqlConnection(_connectionString);

            SqlCommand cmd = new SqlCommand(strSql, connect);

            cmd.Parameters.Add("userId",SqlDbType.Int,0).Value = userId;;

 

            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            DataSet ds = new DataSet();

            sda.Fill(ds);

 

            User _user = new User();

            _user.UserId = userId;

            _user.UserName = ds.Tables[0].Rows[0]["Nom"].ToString();

            _user.UserFirstName = ds.Tables[0].Rows[0]["Prenom"].ToString();

 

            return _user;

        }

 

        public void SaveUser(User user)

        {

            string strSql = "INSERT INTO users (Nom,Prenom) VALUES (@nom,@prenom)";

 

            SqlConnection connect = new SqlConnection(_connectionString);

            SqlCommand cmd = new SqlCommand(strSql, connect);

            cmd.Parameters.Add("nom", SqlDbType.VarChar,50).Value = user.UserName;

            cmd.Parameters.Add("prenom", SqlDbType.VarChar, 50).Value =

user.UserFirstName;

 

            connect.Open();

            cmd.ExecuteNonQuery();

            connect.Close();

        }

    }

}

9) Compiler le Service, vérifier qu’il n’y a pas d’erreur puis lancer l’application pour voir ses détails.

B) Le consommateur du service

1) Ajouter un nouveau site web à la solution. Clique droit sur la solution, ajouter, nouveau site web. Puis le nommer UsersClient. Faire un clique droit sur le site et définir comme projet de démarrage.

2) Ajouter la référence au service WCF. Clique droit sur le site, ajouter une référence de service puis Découvrir. Renseigner comme Espace de noms : UsersService.

3) Ouvrir la page default.aspx et ajouter les contrôles nécessaires à l’exécution, pour obtenir une page de ce style :

Code de la page default.aspx :

<table>

<tr>

<td colspan="3" align="center">Recherche d'un User</td>

</tr>

<tr>

<td>ID :</td>

<td>

<asp:TextBox runat="server" ID="txtSearchId"></asp:TextBox>

</td>

<td>                   

<asp:Button runat="server" ID="btnSearch" Text="Rechercher" OnClick="btnSearch_Click" />

</td>

</tr>

<tr>

<td colspan="3"><hr /> </td>

</tr>

<tr>

<td>Nom :</td>

<td>

                    <asp:TextBox runat="server" ID="txtSearchNom"></asp:TextBox>

</td>

            </tr>

<tr>

<td>Prénom :</td>

<td>

<asp:TextBox runat="server" ID="txtSearchPrenom"></asp:TextBox>

</td>

</tr>

<tr>

<td colspan="3" align="center">

<asp:Label runat="server" ID="lblMess" ForeColor="Green"></asp:Label>

</td>

</tr>

<tr>

<td colspan="3" align="center"> Ajout d'un User</td>

</tr>

<tr>

<td colspan="3"><hr /></td>

</tr>

<tr>

<td>Nom :</td>

<td>

<asp:TextBox runat="server" ID="txtNom"></asp:TextBox>

</td>

            </tr>

<tr>

<td>Prénom :</td>

<td>

<asp:TextBox runat="server" ID="txtPrenom"></asp:TextBox>

</td>

</tr>

<tr>

<td colspan="3" align="center">

<asp:Button runat="server" ID="btnAdd" Text="Ajouter"

OnClick="btnAdd_Click" />

</td>

</tr>

</table>


Code Behind :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void btnSearch_Click(object sender, EventArgs e)

    {

        try

        {

            int userId = int.Parse(txtSearchId.Text);

            UsersService.UsersServiceClient _usersService =

new UsersService.UsersServiceClient();

 

            UsersService.User _user = new UsersService.User();

            _user = _usersService.GetUser(userId);

 

            txtSearchNom.Text = _user.UserName;

            txtSearchPrenom.Text = _user.UserFirstName;

            lblMess.Text = string.Empty;

        }

        catch (NullReferenceException)

        {

            lblMess.Text = "Aucun User ne correspond avotre recherche";

        }

    }

 

    protected void btnAdd_Click(object sender, EventArgs e)

    {

        try

        {

            UsersService.UsersServiceClient _usersService = new UsersService.UsersServiceClient();

            UsersService.User _user = new UsersService.User();

 

            _user.UserName = txtNom.Text;

            _user.UserFirstName = txtPrenom.Text;

 

            _usersService.SaveUser(_user);

 

            txtNom.Text = string.Empty;

            txtPrenom.Text = string.Empty;

            lblMess.Text = "User ajouté avec succès";

        }

        catch (Exception ex)

        {

            lblMess.Text = ex.Message;

        }

    }

}

4) Lancer l’application en ajoutant dans un premier temps un User (la base étant vide), dans le panel du bas.

5) Vous pouvez ensuite faire une recherche par l'identifiant.

Il s'agit d'un exemple simplifié pour comprendre le fonctionnement de WCF, il faudra donc rajouter beaucoup de contrôles et de méthodes pour avoir une application fiable. 

Tags:

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading