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 exposer manuellement des classes dans la définition d'un web service (wsdl)?


Sujet :

Services Web

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Comment exposer manuellement des classes dans la définition d'un web service (wsdl)?
    Bonjour,

    Voila mon problème :

    J'aimerais simplement exposer des classes dans mon wsdl. Hors celle-ci ne sont pas afficher dans intellisense lorsqu’elles ne sont pas utiliser par une méthode.

    Je définis actuellement le xml du wsdl à la main pour plus de souplesse mais je ne parviens toujours pas à réaliser ce que je veux.


    La raison :

    En fait je travail actuellement avec Dynamics CRM 4.0. Hors celui-ci permet de créer des tables et des champs ainsi que des énumérations comme type de champs.

    J'aimerais donc en fait, que ces énumérations se retrouvent dans mon programme C# sous forme d'enum ou de classe.

    Dynamics CRM expose déjà un webservice (crmservice) contenant ces tables du crm (entités) et ces champs (attributs) qui se retrouvent ensuite sous forme de classes (entités) contenant des propriétés (attributs) après l'interprétation du wsdl par visual studio.

    Les énumérations de ces attributs n'étant pas exposées mais étant accessible par des méthodes de lecture j'aimerais générer de la même manière un webservice exposant ces énumérations.

    Hors je bloque sur le problème énoncé plus haut.

    Pourriez-vous m'aider s'il vous plait!

    Merci d'avance chers amis

  2. #2
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Ce serait peut-être plus simple de faire test web services avec Visual Studio.

    Y'a pas de raisons d'exposer des objets qui ne sont pas utilisés par les méthodes du web service, si?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    J'ai pas bien compris "test webservice" ?

    Mais sinon l'utilité je la décrit plus haut.

    C'est d'avoir des énumérations toujours à jour alors que sinon je devrais les écrire à la main et les changer à chaque petits changement (et avoir le risque de ne pas m'etre rendu compte d'un changement (il existe de nombreuses enumeration aux travers de toutes les entités personnalisées).
    (si quelqu'un sait comment autogenerer ces enum sans passer par des webservices qu'il me le dise)

    Microsoft eux expose toute les classes dans ses webservices sans qu'elles soient forcement des paramètres de méthode.

    Et d'ailleurs étrangement lorsque j'ajoute une classe dans le xml du wsdl du webservice crmservice celle ci s'ajoute. Mais je ne comprends pas comment reproduire ce comportement.

    Je comprends que ca puisse te parraitre bizarre si tu n'a pas vu l'utilité de cette technique.
    Mais je te promet que cet astuce peut etre interessant dans ce cas.

    Donc si quelqu'un s'y connait bien en wsdl et qu'il pourrait m'expliquer comment faire je suis preneur.

    Meme avec une technique alternative puisque effectivement à la base les webservices ne doivent pas fonctionner exactement comme ca.

    ...

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par Dragouf Voir le message
    J'ai pas bien compris "test webservice" ?
    Y'a un "t" en trop dslé. Il faut lire "tes".

    Quand on référence un web service dans VS, VS consulte la liste des méthodes et associe les objets nécessaires à leur appel et uniquement ceux là.

    Tu veux mettre des énumérations dans un wsdl alors qu'elle n'ont pas d'utilité directe pour les méthodes du web service? C'est ça?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Oui effectivement je veux mettre des enumerations dans la definition d'un webservice sans qu'elles soient necessairement utilisées par des methodes afin simplement d'autogenrer ces enumerations dans mon applications sans avoir a toutes les creer à la main et ensuite les recreer à chaque modification de celles-ci.

    Je sais que ce n'est pas le fonctionnement premier d'un wsdl mais cela est une solution pour obtenir des classes dynamiquement créées.

    Et je ne parviens toujours a resoudre ce probleme...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Bon vous n'avez pas repondu à mon probleme mais merci quand meme et voici la solution alternative :

    En fait le framework propose une classe qui permet de compiler du code dynamiquement en instanciant un compilateur.

    Le principe est donc de generer du code C# dans notre programme et passer ensuite le code sous forme de string à l'objet qui permet la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CSharpCodeProvider codeProvider = new CSharpCodeProvider();
    CompilerParameters cp = new CompilerParameters();
     
    // Generate a class library.
    cp.GenerateExecutable = false;
    // Save the assembly as a physical file.
    cp.GenerateInMemory = false;
    // Specify the assembly file name to generate.
    cp.OutputAssembly = OUTPUTFILENAME;
    // genere le code source des enums
    string sourceCode = this.GenerateCSharpCode();
    // Invoke compilation of the source file.
    CompilerResults cr = codeProvider.CompileAssemblyFromSource(cp, sourceCode);
    GenerateExecutable -> permet de definir si on veut generer un executable
    GenerateInMemory -> sous forme de fichier
    OutputAssembly -> le nom de notre assembly (ici MesEnums.dll donc)

    Et ma variable source code contient donc mon code C# du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    using System;
     
    namespace MesEnum
    {
       public enum MonEnum
       {
          un,
          deux
       }
    }
    ...


    Et voila, plus qu'a referencer la dll generée dans notre projet...


    J'espere que ce sera utile a quelqu'un !

    En tout cas ca m'a eviter de generer la 100ene d'enumeration à la main...

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

Discussions similaires

  1. Définition des class dans un même fichier!
    Par hibou107 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 16/04/2010, 16h30
  2. Comment ajouter la doc des classes dans l'IDE
    Par patmaba dans le forum JDeveloper
    Réponses: 1
    Dernier message: 26/12/2008, 04h42
  3. Réponses: 2
    Dernier message: 17/06/2005, 23h03
  4. [Client DataSet] Comment Insérer manuellement des lignes ?
    Par WebPac dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 11h40
  5. Réponses: 5
    Dernier message: 08/03/2004, 10h28

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