IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Comment fait-on pour passer une classe en argument à un webservice ?


Sujet :

Services Web

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 44
    Points
    44
    Par défaut Comment fait-on pour passer une classe en argument à un webservice ?
    Bonjour à tous,

    J'essaie de passer en argument à une de mes méthodes webservice une classe.

    Je ne sais pas trop comment faire, j'ai crée ma classe du coté webservice et j'essaie de l'appeler du coté client mais il me dit qu'il ne trouve pas le constructeur

    voici une partie de l'arborescence des classes de mon web service :




    Voici la méthode de mon web service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        [WebMethod
         (EnableSession = true,
           Description = "PROCESS    : Cette fonction permet l'authentification par formulaire<BR>" +
                       "PROTOTYPE  : public string Login( string UserName, string password)<BR>" +
                       "PARAMETRES : 1.string UserName 2.string Password<BR>" +
                       "RETURN     : LogOk ou LogNOk<BR>"
          )]
        public void Login(/*string UserName, string Password*/ Client client)
        {
     
            try
            {
                // if (IsAuthenticated == true)
                //     throw new YetAuthenticatedException();
                // else
                // {
     
                IsAuthenticated = false;
                string Password_From_Server = dbCon.Select(Constantes.SELECT_PASSWORD_FROM_CLIENT_BY_USERNAME, "@UserName", client.getUsername());
                System.Console.WriteLine("password: " + Password_From_Server);
     
                // }
            }
            catch (Exception exc)
            {
                throw RaiseException("Fonction Login", @"E:\ECOLE\3TROISIEME_ANNEE\2006-2007\COURS\Systèmes Distribués\Labo\WEB_SERVICES\SERVEUR_WEB_SERVICE\App_Code\Service.asmx",
                                      exc.Message, "2006", "Fonction Login", FaultCode.Client);
            }
        }

    Code de la classe client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
     
    /// <summary>
    /// Summary description for Client
    /// </summary>
    [Serializable]
    public class Client : Intervenant
    {
        public string username;
        public string password;
     
        public Client()
        { }
     
    	public Client(string username, string password) : base()
    	{
            this.username = username;
            this.password = password;
    	}
     
        public Client( string username, string password, int idIntervenant, string nom, string prenom ) : base(idIntervenant,nom,prenom) 
        {
            this.username = username;
            this.password = password;
        }
     
        public Client(string username, string password, int idIntervenant, string nom, string prenom, string adresse) : base(idIntervenant,nom,prenom,adresse)
        {
            this.username = username;
            this.password = password;
        }
     
        public Client(string username, string password, int idIntervenant, string nom, string prenom, string adresse, string telephone) : base(idIntervenant,nom,prenom,adresse,telephone)
        {
            this.username = username;
            this.password = password;
        }
     
        public Client(string username, string password, int idIntervenant, string nom, string prenom, string adresse, string telephone, string email): base(idIntervenant,nom,prenom,adresse,telephone,email)
        {
            this.username = username;
            this.password = password;
        }
     
        public string getUsername() { return username; }
        public string getPassword() { return password; }
    }
    Code du coté client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using webservice;
     
    public partial class _Default : System.Web.UI.Page
    {
        //private POO_WS.Service service = null;
        private webservice.WebService ws = null;
     
        protected void Page_Load(object sender, EventArgs e)
        {
            //service = (POO_WS.Service)Session["Id"];
            ws = (webservice.WebService)Session["Id"];
        }
     
        protected void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                //Client client = new Client( tbxUserName.Text, tbxPassword.Text );
                //service.Login(tbxUserName.Text, tbxPassword.Text);
                //service.Login( new Client(tbxUserName.Text, tbxPassword.Text) ); 
                //Client client = new Client(tbxUserName.Text, tbxPassword.Text);
     
                ws.Login(new Client(tbxUserName.Text, tbxPassword.Text));
                Response.Redirect("PageInformation.aspx?info=Authentification réussie, bienvenue "+tbxUserName.Text);
            }
            catch ( Exception exc) { lblRéponse.Text = exc.Message; }       
        }
    }
    L'erreur que j'obtiens:

    Error 1 No overload for method 'Client' takes '2' arguments


    J'ai aussi le problème que quand je ne mets pas de constructeur par défaut dans la classe client, il me lance une erreur... pour ne pas me disperser,si quelqu'un pouvait me dire comment faire pour faire transiter des classes correctement, ce serait vraiment très gentil

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 253
    Points
    28 253
    Par défaut
    as-tu pensé à mettre à jour la Webreference de ton client? il se peut qu'il n'ait pas la dernière version de ton WS tout simplement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 44
    Points
    44
    Par défaut
    Oui j'ai mis ma référence à jour... et je me demande tout simplement si c'est possible de passer des classes personnalisée à mon web service ??

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par tofke Voir le message
    Oui j'ai mis ma référence à jour... et je me demande tout simplement si c'est possible de passer des classes personnalisée à mon web service ??
    Si si tu peux bien évidemment, tant que ta classe est serializable (une classe contenant des membres de types simples (string, int, double...) est serializable par défaut).

    En revanche dans un webservice qui expose une classe personnalisée, tu n'as accès qu'à la structure de la classe, tu n'as pas accès à toutes les méthodes, constructeurs...

    Il faut que tu fasses des webmethods te permettant d'accéder aux méthodes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [WebMethod]
    public Client CreateClient(string firstname, string lastname)
    {
       return new Client(firstname, lastname);
    }
     
    [WebMethod]
    public void FaireMethode(Client c)
    {
       c.FaireMethode();
    }

    Côté client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Client c = webservice.CreateClient("tata", "toto");
    webservice.FaireMethode(c);
    Enfin voilà je pense que tu as compris le problème.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 44
    Points
    44
    Par défaut
    Merci pour les explications skyrunner qui ont l'air super.
    Je teste ça dès que possible et je donne de mes news

  6. #6
    Membre actif Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Points : 205
    Points
    205
    Par défaut
    Afin d'utiliser le passage d'argument a un webservice

    N'oublie jamais l'attribut [serialization] sur ta classe.
    Ta classe doit avoir un constructeur sans argument.
    Et toutes les proprite de ta classe doivent respecter les regle ci dessus

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 101
    Points : 46
    Points
    46
    Par défaut
    Bonjour
    j'ai aussi un problème du même ordre
    au fait quant je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Comment c=service.CreateComment("fr", "txtttt", true);
    il me dis l'erreur suivante :

    Impossible de convertir implicitement le type 'TestWebServices.localhost.Comment' en 'DocumentModel.Comment'

    C'est comme s'il connait deux type de classe Comment !!!
    ps: Comment c une classe commentaire que j'ai crée.
    CreateComment c une methode qui fais appel tout simplement au constructeur c tout

    merci
    a+

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 101
    Points : 46
    Points
    46
    Par défaut
    au fait j'ai un autre probleme aussi quant j'utilise dans le webservice des objets complexes
    et qu je fais mettre a jour dans le cote client il me di uen erreur du genre :

    Impossible de charger un fichier ou l'assembly ....

    Merci

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/01/2019, 23h25
  2. Passer une class comme argument de fonction
    Par Pelote2012 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 07/08/2014, 12h03
  3. Réponses: 0
    Dernier message: 12/04/2013, 15h19
  4. Comment fait-on pour insérer une date dans un champs DateTime
    Par gibea00 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/01/2007, 01h04
  5. Comment fait-on pour ajouter une signature à son profil ?
    Par mullger dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 28/04/2006, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo