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 :

Pourquoi mon XmlInclude( dataset) ne marche pas?


Sujet :

Services Web

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Pourquoi mon XmlInclude( dataset) ne marche pas?
    Bonjour,

    J'ai déjà utilisé l'attribut [XmlInclude(typeof(MyCustomType))] avec succes.
    Mais aujourd'hui, je butte.

    Mon dernier essais, simplifié au maximum, est celui-ci:
    1) Un exemple qui fonctionne.
    - nouvelle solution, nouveau projet de type Web service.
    - J'ajoute une nouvelle classe, soit Class1.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Serializable]
    public class Class1
    {
        public Class1() { }
    }
    - J'ajoute une seconde classe, soit Class2.cs qui dérive de Class1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Serializable]
    public class Class2 : Class1
    {
        public Class2() { }
    }
    - Enfin, dans le web service, je crée une méthode qui retourne un objet de type Class1. Dans cette methode, il y a un 'cast' implicite de Class2 vers Class1. Pour disposer de la définition du type Class2 au niveau du client, il faut utiliser l'attribut [XmlInclude].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [WebMethod]
    [System.Xml.Serialization.XmlInclude(typeof(Class2))]
    public Class1 HelloWorld()
    {
        return new Class2();
    }
    - Je 'Build'
    - Je crée un nouveau projet de type console. J'y ajoute une web reference vers mon web service.
    - Et hop, là, j'ai accès au type Class2.

    2) Maintenant, la même chose, mais avec un DataSet ...
    - Je crée simplement une classe DataSet2 qui dérive de DataSet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Serializable]
    public class DataSet2 : DataSet
    {
        public DataSet2() { }
    }
    - Je crée une méthode web qui retourne un objet de type DataSet. j'XmlInclude mon type dérivé DataSet2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [WebMethod]
    [System.Xml.Serialization.XmlInclude(typeof(DataSet2))]
    public DataSet HelloWorld2()
    {
        return new DataSet2();
    }
    - Je build
    - J' update ma web reference dans le projet console
    - Et là, paf, pas de type DataSet2

    Pourquoi?

    Merci d'avance pour vos avis.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Après quelques recherches sur le sujet, voici quelques une de mes découvertes:

    Il n'y a pas beaucoup de sens à vouloir transmettre au client la dénition de ce qu'est un Dataset. Si c'est un client .NET, c'est built-in. Ce qui caractérise surtout un Dataset d'un autre, c'est son contenu. Plus précisément, ses tables et colonnes.
    Ce que l'on cherche donc à transmettre au client, c'est donc bien le schema d'un dataset. Un tel Dataset est alors dit "typé".
    Lorsque l'on crée un dataset typé avec les outils de Visual Studio, le code autogénéré permet d'obtenir la définition du type du côté client.

    Juste, non?

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 60
    Points
    60
    Par défaut Inclure noeud de type hérités
    Salut,

    Personnellement j'ai réussi à ajouter des types de noeuds de types hérités.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [XmlInclude(typeof(Trace)),XmlInclude(typeof(Test))]
    public abstract class Log{
     
    blabla
    }
    Peut être que cela pourra t'aider ....

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

Discussions similaires

  1. Pourquoi mon animation Flash ne marche pas sur IE ?
    Par Audrey75 dans le forum Flash
    Réponses: 23
    Dernier message: 23/12/2008, 13h58
  2. Pourquoi cette requête SQL ne marche pas toujours
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 14/12/2006, 17h29
  3. [C#] ftp : pourquoi mon fichier à uploader n'est pas accessible ?
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/09/2006, 14h52
  4. Réponses: 2
    Dernier message: 12/05/2006, 23h01
  5. Mon service Windows ne marche pas
    Par laadhar dans le forum Langage
    Réponses: 9
    Dernier message: 01/02/2006, 18h13

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