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

ASP.NET Discussion :

WebMethod et erreur liee a la Serialization


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut WebMethod et erreur liee a la Serialization
    Bonjour.

    J'ai realise une page Web melant AJAX et C#.


    1/ Depuis mon Javascript, j'appelle une WebMethod ecrite en C# dans le code Behind
    2/ Cette WebMethod consulte un fichier ressources liee a la culture et retourne un string
    3/ Enfin, cette valeur est recuperee par le javascript pour etre affichee dans une Message Box alert()

    L'ereur apparait au niveau de ma WebMethod que voici (RM est mon objet System.Resources.ResourceManager pour gerer la globalization):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //this WebMethod is called from Javascript and 
        //return the translation in French of the word in argument
        [WebMethod]
        public static string Translate(string word)
        {
           return  RM.GetString(word);
        }
    Et j'obtiens donc l'erreur suivante :

    Cannot serialize object with cyclic reference within child properties.
    Apres quelques recherches sur la serialization, je suis un peu paume sur la cause potentielle de cette erreur. Tres certainement un probleme lie a la lecture de mon fichier ressource mais lequel ? N'est pas lie au fait que ma WebMethod est statique ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Une "référence cyclique" signifie que tu as un objet A qui référence un objet B, qui lui-même référence l'objet A. Quand le sérialiseur rencontre un objet qu'il a déjà sérialisé, il lève une exception.

    Si tu as dans un objet enfant une propriété qui pointe vers l'objet "parent", il ne faut pas sérialiser cette propriété. Tu peux empêcher sa sérialisation à l'aide de l'attribut XmlIgnore.
    http://tlevesque.developpez.com/dotn...ization/#LII-A

    Par contre, pour une string, je ne vois pas trop comment ça peut se produire

    Sinon ça me semble bizarre de déclarer en statique une WebMethod... je n'y connais pas grand chose en WebServices, mais il me semble que normalement ça devrait être une méthode d'instance (mais je vois pas bien le rapport avec ton problème)

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    mmmm d'accord.
    Je comprends le problème. Reste à en trouver la cause. Peut-être que c'est mon ResourceManager, enfin les fichiers ressources...
    Je n'y connais encore rien à la sérialisation.
    En commentant les morceaux de code, c'est en tout cas de lui que semblait venir le problème.
    Je ne pourrais pas corriger tout ça avant demain. Je reviendrai mettre le sujet en "résolu" si c'est le cas.

    Pour les WebServices j'ai vu certains tutoriaux disant qu'il fallait que ce soit en statique. Mais j'ai loué un livre aujourd'hui qui dit le contraire. J'avoue ne pas avoir pousser la recherche, les WebServices n'étant pas le sujet de mon travail ici. Je vais vérifier tout ça.

    Merci beaucoup pour la pertinence de tes réponses.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai vérifié vite fait, et si j'ai bien compris, dans un vrai webservice, les WebMethod sont des méthodes d'instance, mais dans une page web, les méthodes de page utilisées en AJAX doivent être statiques. Mais de toutes façons je vois mal comment ça pourrait être lié à ton problème...

    A priori le RessourceManager n'a rien à voir là-dedans non plus.

    Donc la seule explication que je vois, c'est que l'erreur n'est pas dans cette méthode... Essaie de mettre des breakpoints dans ton code, pour essayer de voir où ça plante

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Apres differentes executions avec breakpoints, je constate que l'erreur apparait en realite dans la fonction Javascript qui appelle la WebMethod, a cause de ma variable str.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //This function is called when the user double clicks on a word
        //It catches the mouse event and calls the Web Method
        function Selection(obj, evenement) {
    	var str;
     
    	if (typeof document.selection == 'undefined')
    		str = window.getSelection();
    	else
    		str = document.selection.createRange().text;
     
    	//get the word translation and call the display method with the result 
    	//of the translation
    	PageMethods.Translate(str, Display);
    }
    En effet, si j'execute mon code en remplacant str dans l'appel par un string du style "welcome", ca fonctionnce.
    Alors comment un String peut-il etre responsable de ce probleme ? Sachant que str vaut bien un string avant l'appel (je l'ai fait afficher)....

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    bizarre... tu vois quoi si tu ajoutes un alert(str) dans le code JS ?

  7. #7
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Je vois bien mon string, le mot qui a ete double clique.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je crois que je devine le problème... en fait window.getSelection() ne renvoie pas une chaine de caractères mais un objet Selection. Essaie d'utiliser window.getSelection().toString() à la place

  9. #9
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 138
    Par défaut
    Arf.
    En effet ca marche beaucoup mieux comme ca.
    Php est moins tatillon

    Merci beaucoup.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Shargat Voir le message
    Php est moins tatillon
    Moins tatillon qu'ASP.NET ? C'est dans le javascript qu'était le problème, pas dans l'ASP.NET

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

Discussions similaires

  1. [Python 3.X] pyserial: erreur à l'appel de Serial.close()
    Par Spirine dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 15/02/2015, 12h07
  2. [OpenGL 1.x] OpenGL erreur liee a un glEnd
    Par imperio dans le forum OpenGL
    Réponses: 9
    Dernier message: 08/09/2013, 11h11
  3. Serialization erreur OutOfMemory
    Par fanzyride dans le forum Général Java
    Réponses: 6
    Dernier message: 29/05/2008, 11h26
  4. [C#] Comment serializer l'écriture des erreurs dans un fichier
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/11/2006, 14h54
  5. [Javascript] Listes liées en Javascript + erreurs invisibles
    Par MinsK dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 11/05/2006, 15h00

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