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 :

Profondeur maximale pour sérialisation ?


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre du Club
    Profondeur maximale pour sérialisation ?
    Bonjour,

    Je viens d'intégrer une nouvelle équipe et découvre aussi plein de projets, jusque là, tout va bien. En regardant d'un peu plus près le code, je m'aperçois qu'il est truffé de code smells (méthodes d'extension qui font du business ou mieux encore, une Func<.,.> qui embarque un paramètre au niveau de l'appelant et qui traverse les couches pour être exécutées 20.000 lieues sous les mers !) et j'en passe...

    Et là, je tombe sur un service WCF pas tout à fait comme je les connais. Les clients ne font jamais référence au service WCF (référence de service) mais passent par une couche "contract" et toute la partie générée par le service doit être codée à la main (base.Channel...) à chaque fois qu'on implémente une méthode. De même, la sérialisation XML (normalement automatique) a été réécrite "parce qu'elle ne supporte pas une trop grand profondeur" m'a-t-on dit. En fait, la structure des objets transférée est tellement gloubiboulguesque (imaginez, des inner classes dans des classes qui contiennent elles-mêmes d'autres inner classes...) qu'à priori la sérialisation "explose" ou "fait n'importe quoi" (le discours change en fonction de mes interlocuteurs).

    Bref, pour schématiser, on a un objet qui ressemble à ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Main 
    {
        class Inner1 
        {
            class Inner2
            {
                class Inner3
                {
                     ....
                }
            }
        }
    }


    Et donc, je voudrais avoir jusqu'à quel niveau d'imbrication la sérialisation XML fonctionne ?

    Voyant l'état du code, le niveau de certains membres de l'équipe et le fait que personne ne connaisse le livre "Coder Proprement", vous comprendrez que j'émets quelques doutes vis-à-vis des explications qui me sont données. C'est donc pour ça que je vous pose la question aujourd'hui !

    Merci d'avances pour vos réponses !

  2. #2
    Expert éminent sénior
    Bonjour,

    A ma connaissance, il n'y a pas de limitation lié à la profondeur lors de la sérialisation XML. Il faut juste que les classes et les méthodes soient correctement décorées avec les bons attributs.

    Il faudrait avoir les causes réelles pour avoir choisi de tout faire à la mano...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Membre du Club
    Merci pour ta réponse. C'est bien ce qui me semblait, j'avais déjà effectué quelques recherches mais j'ai rien trouvé sur le sujet.

    La raison que l'on m'a donné c'était justement à cause de cette trop grande profondeur d'éléments imbriqués. A mon avis, vu le personnage, ça ne m'étonne pas. C'est le même personnage qui ose remettre en cause un moteur de Bdd (SQL Server entre autres) alors qu'en fait c'est son code qui est foireux. Et ça se dit ingénieur... Bref, voilà juste un aperçu de ma vie

  4. #4
    Expert éminent sénior
    Citation Envoyé par pot2yaourt Voir le message
    C'est le même personnage qui ose remettre en cause un moteur de Bdd (SQL Server entre autres) alors qu'en fait c'est son code qui est foireux. Et ça se dit ingénieur... Bref, voilà juste un aperçu de ma vie
    Si un bug est toujours possible, même dans des SGBD, un bug au sein même du moteur, surtout avec SQL Server, est très peu probable.

    Enfin, il est tellement plus facile de remettre en cause les autres et les outils que ses propres compétences...

    Courage !
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Rédacteur/Modérateur

    En WCF, la profondeur de sérialisation est définie (et modifiable) dans les "readerquotas" du binding : <readerQuotas>.

    Il s'agit de la propriété maxDepth.
    Sa valeur par défaut est 32... Ce qui peut être vite limitant quand on doit envoyer des graphes d'objets complexes.

    Mais de là à réécrire la méthode de sérialisation...

  6. #6
    Expert éminent sénior
    C'est bon à savoir que WCF limite la profondeur. Merci pour l'info
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels