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

Windows Communication Foundation .NET Discussion :

Récupérer un type d'une classe dans un WCF


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut Récupérer un type d'une classe dans un WCF
    Bonjour à tous,
    J'ai un petit soucis concernant mon WCF.
    Voici mon schéma pour que vous voyiez à quoi cela ressemble :


    Ma classe User permet en fait de représenter un tuple de ma base de données.
    J'ai donc décidé que c'était (et j'ai pas trop le choix) ma BLL qui devait faire ce mapping.
    Il transforme donc mon tuple en un User.

    Mon WCF, lui, contient le fichier DLL de la BLL, il y accède et récupère un User via un méthode getUser();.

    Ensuite j'ai un client qui détient un proxy de ce WCF.
    Via ce Proxy je décide de récupérer un User.
    Et là, surprise, ma classe User n'est pas connue, donc mon client ne peut pas faire de requête de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaReferenceWCF.User unUser = monProxy.getUser();
    (monProxy étant le proxy de MaReferenceWCF)

    Voici à quoi ressemble ma classe :
    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
        [DataContract]
        public class User
        {
            String _log;
     
            public User(String PLog)
            {
                Login = PLog;
            }
     
            [DataMember]
            public String Login
            {
                get { return _log; }
                set { _log = value; }
            }
    }
    Quelqu'un a-t-il une idée pour que cette classe soit accessible par le client?

    EDIT:
    Dois-je rajouter un EndPoint dans mon App.config de mon service ? mon Wcf utilise une interface, qui est une interface de test pour mon premier laboratoire. Cette interface est définie de la même manière que ma classe user à la différence qu'elle est définie dans le Endpoint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <endpoint address=""
                      binding="basicHttpBinding"
                      contract="WcfService1.IMyWcfService"/>

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Il ne faut pas oublier de faire un update du "Service Reference".
    Il n'y a pas de raisons pour que ca ne marche pas. Ca doit juste être un problème de namespace (regarde dans le "Object Browser" de visual studio pour voir les classes proxy générées)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Petit up pour le EDIT de mon post précédent.

    De plus, ne dois-je pas créer une interface pour User du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [ServiceContract]
    public interface IUser
    {}
    Et ma classe User implémenterait cette interface (public class User : IUser)...
    (c'est une idée proposée sur le chat)

    Une fois cette interface réalisée, créer un Endpoint sur ce ServiceContract ?

    En ce qui concerne l'explorateur d'objets je l'ai déjà parcouru et ne retrouve pas cette classe User...
    Bizarre..

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Comme l'indique l'attribut, tu créerais un ServiceContract et non pas un contrat de données.
    Non non ce que tu as fait dans le premier post me parait bon.
    On peut avoir ton interface de service?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Mon interface de mon service concerne un autre laboratoire, cette interface est bel et bien exposée au client, voici le code de ma classe qui détient le service et la classe ProcessInfo, qui est une classe dont je me servais pour mon premier Labo :
    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
        #region Service
        [ServiceContract]
        public interface IMyWcfService
        {
            [OperationContract]
            DateTime GetDate();
     
            [OperationContract]
            String GetString(String chaine);
     
            [OperationContract]
            ProcessInfo GetProcessInfo(String NomProcess);
     
            [OperationContract]
            List<ProcessInfo> GetRunningProcesses();
        }
        #endregion
     
        [DataContract]
        public class ProcessInfo
        {
            DateTime _heure;
            String _nom;
     
            [DataMember]
            public String nom
            {
                get { return _nom; }
                set { _nom = value; }
            }
     
            [DataMember]
            public DateTime heure
            {
                get { return _heure; }
                set { _heure = value; }
            }
        }
    Mon WCF implémente bien ce service et la classe est bel et bien exposée.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Bonjour !
    Donv voilà, une petite nouvelle c'est que j'arrive à exposer le User mais c'est du bidouillage et j'aime vraiment pas ça.
    En gros, j'ai mon interface IMonWcf qui contient des méthodes que MonWcf implémente. Dans cette interface si je fais une méthode du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [OperationContract]
    User getUnUser();
    et que je l'implémente dans MonWcf de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    User getUnUser(){ return new User(); }
    Alors là il veut bien m'exposer le User.
    Pourquoi suis-je obligé d'avoir une méthode avec un User dans son interface pour qu'il l'expose ?
    J'ai bien un ServiceContract et j'y ai associé un endpoint dans mon app.config, le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <endpoint address=""
                      binding="basicHttpBinding"
                      contract="WcfService1.IMyWcfService"/>
    Afin d'exposer mon User, ne dois-je pas créer un second ServiceContract ? Mais si c'est le cas, je ne sais pas quoi mettre dedans car j'ai juste besoin de connaître le type User afin que le client puisse faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaReferenceWeb.User unUser = monProxy.getUnUser();
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer un event d'une classe dans un userControl
    Par newtito dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/08/2012, 16h52
  2. Réponses: 16
    Dernier message: 26/04/2012, 11h09
  3. Réponses: 1
    Dernier message: 10/04/2010, 19h04
  4. Réponses: 5
    Dernier message: 09/04/2010, 16h49
  5. récupèrer le type d'une classe
    Par zalalus dans le forum Débuter
    Réponses: 1
    Dernier message: 17/09/2009, 14h09

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