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 :

Service WCF Paramètres Optionnels


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut Service WCF Paramètres Optionnels
    Bonjour je dois réaliser un service WCF et j'aimerais savoir si on peut utiliser les paramètres optionnels dans les méthodes.

    J'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <OperationContract()> _
     Function maFonction(Optional ByVal param As ObjetQuelconque = valeur)
    mais dans mon application Silverlight qui consomme le service, le paramètre est obligatoire

    Y a t'il une autre façon de faire ?

    merci

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Utiliser un Nullable<Int> peut-être une solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Ce n'ai pas possible car là j'ai fait un exemple avec Int mais sa peut être un objet quelconque de ma mon projet et je dois pouvoir lui donner une valeur par défaut et cette solution ne fonctionne pas.

    (j'ai modifier un peu le poste pour que ce soit plus claire)

  4. #4
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Au niveau des méthode je pense que ce n'est possible en WSDL (mais à vérifier)
    Cela ce fait un niveau des objets échangés s'ils évoluent pour que les anciens clients puissent toujours fonctionner et les desserialiser :

    En c#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [DataMember(IsOptional = true, VersionAdded = 2)]
    Mais avec cette fonctionnalité tu dois pouvoir couvrir ton cas : la signature de la méthode ne change pas mais le paramètre est un objet à géométrie variable avec des propriété optionnelles.

    Et si tu voulais faire du contract first avec WCF pour maîtriser le WSLD et mettre des paramètre optionnels et tout je crois pas que ça soit prévu et intégré dans les outils de MS.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Je n'arrive pas à voir ou tu veux en venir tu pourrais me faire un exemple NicoL ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NicoL__ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [DataMember(IsOptional = true, VersionAdded = 2)]
    Petite rectification IsOptional n'existe pas pour l'attribut DataMember . Il faut utiliser la propriété IsRequired pour rendre optionnel un membre d'un contrat de données.
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [DataMember(IsRequired = false)]
    Ton code initial me fais penser que j'ai dû louper un truc mais ce n'est pas le cas. Ta propriété VersonAdded aussi n'existe pas pour l'attribut DataMember. Par contre elle existe pour l'attribut OptionalAttribute sauf que l'info indique => "Cette propriété est réservée et n'est pas utilisée." Et je ne pense pas que l'attribut OptionalFieldAttribute soit d'actualité pour WCF.

    Sinon pour palier au problème de versionning la meilleure méthode est d'implémenter l'interface IExtensibleDataObject. Pour plus d'infos sur les bonnes pratiques en WCF regardes ici.

  7. #7
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Pups je me suis trompé, j'ia effectivement écrit n'importe quoi... mais normalement le WSDL permet ce genre de truc, Microsoft pas...
    Du coup j'ai relu un peu tout, et il n'y a pas de versionning sur les interface WCF... soit elle le changement est compatible (ajout de champs) soit incompatible alors il faut faire un nouveau contrat avec un n° de version dans le namespace.
    Pour en revenir au sujet, on peut pas faire des signature de méthode avec des paramêtres optionnelles par contre on peut faire des objets qui sont utilisé avec des propriété optionnelles. Ce qui permet de résoudre le problème.

  8. #8
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Citation Envoyé par timlartiste Voir le message
    Bonjour je dois réaliser un service WCF et j'aimerais savoir si on peut utiliser les paramètres optionnels dans les méthodes.

    J'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <OperationContract()> _
     Function maFonction(Optional ByVal param As ObjetQuelconque = valeur)
    mais dans mon application Silverlight qui consomme le service, le paramètre est obligatoire
    Y a t'il une autre façon de faire ?
    merci
    Je suis formel, ce n'est pas possible, et cela ne sert à rien de passer du temps sur ce sujet, WCF est rigoureux sur les datacontrats et ca s'appelle datcontrat, c'est à dire que les données en int ou out doivent respecter ce contrat. Si vous voulez quand meme bricoller ce genre de chose s'acchant que ni la surcharge des méthodes, ni le polymorphisme ne marchent, le plus simple est de créer d'autres méthodes avec d'autres noms parce que même dans le cas des nullable<int>, vous allez quand même fournir un paramètre ...

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  9. #9
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Certes mais on peut passer des objet avec plus ou moins de champs, la sérialisation/deserialisation devrait quand même bien se réaliser.
    Cela permet une certaine évolutivité des WS et de supporter plusieurs clients ayant des besoins un peu différents.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 20
    Par défaut
    Il est donc impossible de gérer les paramètres optionnels des méthodes en <OperationContract()> dans un Service WCF.

    Réponse faite, forum résolu.
    Merci à tous.

  11. #11
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Attention, vous devez toujours passer un objet telle que défini dans le contrat de service maintenant s'il y'a des champs de l'objet qui n'ont pas été renseignés, cela sera une autre paire de manche.
    C'est à dire que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [OperationContrat]
    int Bon_Update(BonReception br);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [DataContrat]
    public class BonReception
    {
         public Champ1 type1 { get; set; },
         public Champ2 type2 { get; set; },
        public Champ3 type3 { get; set; }
    }
    Et là, vous pouvez fournir des valeurs à certaines propriétés sur le client

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Bon_Reception br = new Bon_Reception { Champ1=Valeur1 }
    Using(ServiceClient srvcli=new ServiceClient())
    {
           int retval=srv. Bon_Update(br);
          srv.Close();
    }
    Et ca va marcher... mais cela ne veut pas dire que WCF supporte des paramètres optionnels !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par WOLO Laurent Voir le message
    mais cela ne veut pas dire que WCF supporte des paramètres optionnels !
    Ce que tu dis est vrai mais faut aussi savoir ce que les autres entendent par paramètres optionnels.

    Les paramètres optionnels ne sont pas supportés dans les opérations du contrat de service. Cela veut dire que si une fonction de ton service a besoin de n paramètres pour s'exécuter alors tu dois passer n paramètres pour pouvoir appeler la fonction et l'exécuter correctement.

    La solution proposée par NicoL permet bien de palier à ce manque, c'est à dire de créer un contrat de données avec des paramètres optionnels (rigoureusement appelés Propriétés Optionnelles en jouant sur la valeur de IsRequired de l'attribut DataMember). une fois ce contrat de données créer alors tu peux l'utiliser en paramètre de ta fonction. J'aurai fait pareil.

  13. #13
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Et qu'est ce qui ce passe lors de la sérialisation en XML ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/08/2021, 14h52
  2. Réponses: 2
    Dernier message: 11/05/2010, 13h15
  3. Fonction ou procédure avec paramètres optionnels ?
    Par [Silk] dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2006, 13h55
  4. Paramètre optionnel dans une fonction
    Par bractar dans le forum Langage
    Réponses: 3
    Dernier message: 10/03/2006, 17h02
  5. paramètre optionnel dans une fonction
    Par titoumimi dans le forum Langage
    Réponses: 2
    Dernier message: 02/02/2006, 15h29

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