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 :

Question sur les WebService renvoyant un DataSet ?


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut Question sur les WebService renvoyant un DataSet ?
    Voila étant débutant sous .net, j'ai commencé à utiliser des WebServices (que j'ai créé moi-même) pour ma WebForm. Le problème c'est que mes WebServices renvoient des DataSet. On m'a dit que sa posé problème au niveau interopérabilité.

    D'après ce que j'ai compris, il faut que je crée une classe avec tous les champs de ma base de données (je ne sais pas s'il faut faire un constructeur, des ascesseurs, des modifieurs, etc...). Je me posais donc la question où aller se trouver ma Classe puisque je vais l'utiliser aussi bien dans mon WebService car il faudra que je crée un tableau d'objet de ma classe pour ranger les informations renvoyer par ma base de données et ainsi remplacer mon DataSet.

    Ou dans ma page Web car après il faudra que je réutilise les informations renvoyer dans mon tableau d'objet.

    Autre petite question, est ce que je suis obligé d'utiliser XMLserializer

    Merci de m'éclaicir un peu

  2. #2
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut tazmania,

    Juste une petite remarque, essaie de poster dans le bon forum la prochaine fois Web Service , et jette un coup d'oeil sur les regles du forum.

    Citation Envoyé par tazmania
    Le problème c'est que mes WebServices renvoient des DataSet. On m'a dit que sa posé problème au niveau interopérabilité.
    Pas tout à fait vrai. plutot tu n'as pas besoin d'un objet enorme comme le DataSet pour juste consulter des donnees.

    Citation Envoyé par tazmania
    D'après ce que j'ai compris, il faut que je crée une classe avec tous les champs de ma base de données (je ne sais pas s'il faut faire un constructeur, des ascesseurs, des modifieurs, etc...).
    Oui c'est bien ca, comme un debut mes toutes les proprietes à public.

    Citation Envoyé par tazmania
    Je me posais donc la question où aller se trouver ma Classe puisque je vais l'utiliser aussi bien dans mon WebService car il faudra que je crée un tableau d'objet de ma classe pour ranger les informations renvoyer par ma base de données et ainsi remplacer mon DataSet.
    Tu peux retourner une collection managée serializable, une list generique List<TaClasse> fera l'affaire, cette list tu vas la recuperer coté page ASP.NET sous forme de tableau TaClasse[].

    Citation Envoyé par tazmania
    Ou dans ma page Web car après il faudra que je réutilise les informations renvoyer dans mon tableau d'objet.
    Le tableau d'objet tu vas le recuperer comme je t'ai dit coté aspx. tu vas utiliser la reference du proxy generé dans ton IDE (Visual Studio) pour declarer le tableau. tu sais la meme reference que tu vas utiliser pour appeler des web methods.

    Citation Envoyé par tazmania
    Autre petite question, est ce que je suis obligé d'utiliser XMLserializer
    Il suffit de declarer ta classe serializable. Ton titre n'est pas conforme aux regles, donc je te mes les deux versions. En C# tu mes l'attribut [Serializable] juste au dessus de la declaration de la classe ou <Serializable()> sur la meme ligne de la declaraion.

    Citation Envoyé par tazmania
    Merci de m'éclaicir un peu
    J'espere que je t'ai eclairci un peu

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Oui tu m'as grandement aidé, je te remercie beaucoup, je vais me lancer la desuus

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Tu peux retourner une collection managée serializable, une list generique List<TaClasse> fera l'affaire, cette list tu vas la recuperer coté page ASP.NET sous forme de tableau TaClasse[].
    Je suis sous VS.NET 2003 sa ne fonctionne pas !!

    Je peux faire sa
    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
     
    [WebMethod]
     public ArrayList GetPersonne(){
        Personne p = new Personne ();
        ArrayList perso = new ArrayList();
     
        string querytest = "SELECT nom, prenom from personne";
     
        OleDbDataAdapter monAdapter = new OleDbDataAdapter (querytest, Connexion);
        DataSet monDataSet = new DataSet ();
     
        foreach (DataRow row in monDataSet.Tables[0].Rows) {
            p.setnom(row[0]);
            p.setprenom(row[1]);
            perso.add(p);
        }
        return perso;
    }

    Après dans mon code behind, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Service1 WebService = new Service1();
    ArrayList test = new ArrayList();
     
    test.Add(WebService.GetPersonne())
    Je ne sais pas si c'est bien de faire comme ça

    Avec cette méthode, je n'utilise pas XMLserializer

    Alors que j'ai déclaré 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
    18
    [Serializable]
    public class Personne {
      private string Nom;
      private string Prenom;
     
      public Personne (string name, string firstname){
         Nom = name;
         Prenom = firstname
      }
     
      public void SetNom (string name){
          Nom = name;
      }
     
      public void SetPrenom (string firstname){
           Prenom = firstname;
      }
    }
    C'est bon ce que j'ai fait ou je pars sur la mauvaise voie

  5. #5
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Citation Envoyé par tazmania
    Je suis sous VS.NET 2003 sa ne fonctionne pas !!
    Fallait le mentionner dans le titre

    Citation Envoyé par tazmania
    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
     
    [WebMethod]
     public ArrayList GetPersonne(){
        Personne p = new Personne ();
        ArrayList perso = new ArrayList();
     
        string querytest = "SELECT nom, prenom from personne";
     
        OleDbDataAdapter monAdapter = new OleDbDataAdapter (querytest, Connexion);
        DataSet monDataSet = new DataSet ();
     
        foreach (DataRow row in monDataSet.Tables[0].Rows) {
            p.setnom(row[0]);
            p.setprenom(row[1]);
            perso.add(p);
        }
        return perso;
    }
    [Serializable]
    public class Personne {
      private string Nom;
      private string Prenom;
     
      public Personne (string name, string firstname){
         Nom = name;
         Prenom = firstname
      }
     
      public void SetNom (string name){
          Nom = name;
      }
     
      public void SetPrenom (string firstname){
           Prenom = firstname;
      }
    }
    Ca a l'air parfait, si je ne m'abuse ArrayList est bien XML Serializable.

    Citation Envoyé par tazmania
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Service1 WebService = new Service1();
    ArrayList test = new ArrayList();
     
    test.Add(WebService.GetPersonne())
    Bon je me rappelle pas tres bien avec le FrameWork 1.1 comment ca fonctionne, mais ce n'est surement pas comme ca, je t'ai dit dans le precedent post que le tableau fallait le declarer avec l'insatnce du proxy generé dans ton cas WebService .

    avec 2.0 j'aurais fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WebService.Personne[] MesPersonnes=WebService.GetPersonne();
    Essai la meme chose sinon dis moi que t'offre ton instance WebService comme membres !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Par défaut
    Bon je me rappelle pas tres bien avec le FrameWork 1.1 comment ca fonctionne, mais ce n'est surement pas comme ca, je t'ai dit dans le precedent post que le tableau fallait le declarer avec l'insatnce du proxy generé dans ton cas WebService .
    Oula, je n'ai pas tout compris
    C'est quoi la déclaration de l'instance du proxy, j'ai rien fait de spécial moi.

    avec 2.0 j'aurais fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebService.Personne[] MesPersonnes=WebService.GetPersonne();
    Mince cela ne marche pas, il me dit :
    Le type ou le nom d'espace de noms 'WebService' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)

    Alors que je l'ai bien déclaré avant en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Service1 WebService = new Service1();
    Essai la meme chose sinon dis moi que t'offre ton instance WebService comme membres !
    Euh, j'en sais rien

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Par défaut
    Citation Envoyé par Mehdi Feki Voir le message
    Tu peux retourner une collection managée serializable, une list generique List<TaClasse> fera l'affaire, cette list tu vas la recuperer coté page ASP.NET sous forme de tableau TaClasse[].
    Bonjour bonjour,

    J'aimerais que mon WebService retourne un type "System.Collections.Generic.List<MaClasse>". Mon WebService se compile bien, mais dans mon programme qui fait appel à ce WebService, il est indiqué que ma fonction retourne l'objet "MaClasse[]" et non l'objet "System.Collections.Generic.List<MaClasse>"...

    Les listes génériques ne sont donc pas sérialisables ?
    quelqu'un a-t-il une idée ?

    Merci merci

  8. #8
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    C'est tout à fait normal, List est sérialisée en ComplexType qui est à son tour désérialisé en Tableau. C'est le fonctionnement du Framework.

    Il faut reconstruire la List après l'invocation du service Web.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Par défaut
    OK merci bien pour la réponse !

    Et encore une petite question.... dans la fonction dans laquelle j'utilise mon web service, en gros j'ai :

    TableauRetourné = WebService.MaFonctionQuiRetourneMonTableau();

    Mais si je ne me trompe, mon "TableauRetourné", pour bien faire, il faudrait l'instancier... or, pour instancier un tableau, il faut bien connaitre sa taille, non ?

    D'après ce que je me souviens, l'instanciation d'un tableau est un truc du style : "MonTypeDeDonnées[] TableauRetourné = new MonTypeDeDonnées[Taille]();"... Dès lors, comment puis-je connaitre sa taille à l'avance ?

    Merci pour vos éclaircissements !

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par nico_4802 Voir le message

    D'après ce que je me souviens, l'instanciation d'un tableau est un truc du style : "MonTypeDeDonnées[] TableauRetourné = new MonTypeDeDonnées[Taille]();"... Dès lors, comment puis-je connaitre sa taille à l'avance ?
    Tu travailles sur un List<>, et, à la fin, tu fais "ToArray", et hop:! t'as le tableau kivabien

  11. #11
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Citation Envoyé par nico_4802 Voir le message
    Mais si je ne me trompe, mon "TableauRetourné", pour bien faire, il faudrait l'instancier... or, pour instancier un tableau, il faut bien connaitre sa taille, non ?

    Le tableau est déja instancié

    Citation Envoyé par nico_4802
    TableauRetourné = WebService.MaFonctionQuiRetourneMonTableau();
    Permet juste de copier la référence du tableau dans TableauRetourné.

    Sinon je te rappelle que les types retournés par le service Web sont sérialisables. C'est à dire qu'ils permettent juste de transiter le flux xml et donc ils ne contiennent aucune logique métier. Avant de créer ta List, il est préférable de copier les PersonneWS dans des PersonneBLL.

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

Discussions similaires

  1. [REST Jersey] Question sur les WebServices
    Par CooLMaN974 dans le forum Services Web
    Réponses: 5
    Dernier message: 03/09/2013, 21h38
  2. Question sur les webservices
    Par mister3957 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 27/07/2012, 16h36
  3. Petites question sur les WebServices (appel et classe envoyée)
    Par Arsenic68 dans le forum Services Web
    Réponses: 0
    Dernier message: 24/12/2009, 14h54
  4. Question sur les webservices
    Par dedicare dans le forum Services Web
    Réponses: 0
    Dernier message: 20/04/2008, 18h13
  5. Question sur les Webservices
    Par boudhala dans le forum Services Web
    Réponses: 6
    Dernier message: 02/11/2007, 10h09

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