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

Windows Communication Foundation .NET Discussion :

WCF exception deserialisation


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut WCF exception deserialisation
    Bonjour
    J'ai une exception liée à la déserialisation d'une classe "DeviceConfig" lors de l'appel d'une opération WCF.

    "The formatter threw an exception while trying to deserialize the message : There was an error while trying to deserialize parameter.The InnerException message was ''Element' '_x003C_DriverConfig_x003E_k__BackingField' from namespace 'http://mon_namespace' is not expected. Expecting element '_x003C_DisplayName_x003E_k__BackingField'.'. Please see InnerException for more details."
    Le problème c'est que la version de "DeviceConfig" n'est pas la même entre le client et le serveur, coté serveur j'ai ajoute une propriété "DisplayName".
    Lorsque le serveur retourne la classe "DeviceConfig" vers le client il n'y pas de problèmé, le client ignore la propriété "DisplayName".
    Par contre lorsque le client envoie "DeviceConfig" au serveur, celui s'attend à avoir une propriété "DisplayName", ne la trouvant pas il meurt dans d'atroces souffrances ( bon c'est pas vrai, en fait il envoie simplement une exception vers le client)


    Donc la question est :
    Comment peut on faire évoluer la classe DeviceConfig, en ajoutant une nouvelle propriété tout en restant compatible avec des clients qui n'ont pas la nouvelle version ?

    La classe DeviceConfig :

    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
        [Serializable]
        public class DeviceConfig
        {
            public DeviceConfig()
            {
            }
     
            [XmlElement]
            public string Name { get; set; }
     
            [XmlElement]
            public string TypeName { get; set; }
     
            [XmlElement]
            public ProtoCfg ProtoConfig { get; set; }
     
            [XmlElement]
            public DriverCfg DriverConfig { get; set; }
     
            [XmlElement(IsNullable = true)]
            public string DisplayName { get; set;}
        }
    Si quelqu'un a une idée je suis preneur. Merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Je pense pas que tu aies trop le choix:
    Implémenter plusieurs versions de tes services

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Ouai je sais, ça me pend au nez, mais si je peux éviter je préfère.
    Je me demande s'il y a pas une option pour que le process de déserialisation ignore une propriété manquante et l'initialise avec une valeur par défaut.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    et avec un héritage pour ajouter la propriété ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    J'ai essayé par héritage, mais dans ce cas c'est le client qui n'est pas content si on lui retourne une classe dérivée qu'il ne connait pas.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    fais la circuler en classe de base et cast ensuite après désérialisation côté serveur ?!

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

Discussions similaires

  1. Premier test WCF non concluant, exception ServiceHasZeroAppEndpoints
    Par WebPac dans le forum Windows Communication Foundation
    Réponses: 22
    Dernier message: 07/12/2010, 14h37
  2. Gestion des Exception WCF pour SilverLight
    Par OminiuS dans le forum Windows Communication Foundation
    Réponses: 1
    Dernier message: 16/09/2010, 11h36
  3. Exception WCF incompréhensible
    Par bleuerouge dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 16/08/2010, 11h15
  4. Client WebServices SAP Exception : Deserialisation failed
    Par *alexandre* dans le forum Services Web
    Réponses: 1
    Dernier message: 19/06/2009, 09h24
  5. WCF - System.ServiceModel.FaultException, comment afficher les details d'exception?
    Par Pierrers dans le forum Windows Communication Foundation
    Réponses: 4
    Dernier message: 20/07/2007, 21h35

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