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

C# Discussion :

Stacktrace reflection et WCF


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Stacktrace reflection et WCF
    Bonjour,

    J'ai un problème avec un bout de code que j'ai résolu mais dont je n'arrive pas à trouver d'explications.
    Peut être que vous pourrez m'aider.

    J'ai un service Windows qui instancie une class gérant mes logs.
    Dans ce service j'instancie un host WCF.
    Je met mon instance de ma class de log dans une class statique qui va permettre la propagation de mon instance de log à mon service WCF.

    Dans mon constructeur de mon service WCF j'utilise mon logger. Tout ce passe bien j'ai bien mes logs.

    Dans une méthode exposée du service je fais un appel et là rien ne s’affiche, mon client bug et je soupçonne d'avoir une exception.
    Ma méthode de log la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void Info(string message)
            {
            var className = GetCallingClass();
                var methodName = GetCallingMethod();
     
                Logger.InfoFormat("[{0}] [{1}] - {2}", className, methodName, message);
    }
    Et voici la methode GetCallingClass:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    return new StackTrace().GetFrame(2).GetMethod().Name;
     
            }
    et Get callingMethod :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     private static string GetCallingMethod()
            {
                    return new StackTrace().GetFrame(2).GetMethod().Name;
            }
    Donc avec ce code plus haut ca ne marche pas. Par contre si je fais un try catch dans mes méthodes là ca marche :
    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
    private static string GetCallingMethod()
            {
                try
                {
                    return new StackTrace().GetFrame(2).GetMethod().Name;
                }
                catch
                {
                    return "Unknown Method";
                }
            }
     
            private static string GetCallingClass()
            {
                try
                {
                    return new StackTrace().GetFrame(2).GetMethod().ReflectedType.Name;
                }
                catch
                {
                    return "Unknown Class";
                }
            }
    J'ai bien mon log avec les bons noms de class et méthode. Je ne rentre donc pas dans le catch.

    La question est : Pourquoi ca marche ?

    Si vous avez une idée n'hésitez pas !

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    Je soupçonne que dans certains cas StackTrace().GetFrame(2) n'existe pas, du coup tu doit te taper une NullReferenceException qui se trouve "catch" par la mise en place du try/catch.
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Justement non. Sinon je rentrerai dans le catch et j'aurai dans mon log "unknown class" et "unknown method"
    Et ce n'est jamais le cas :

    Sans try catch rien, avec try catch ca marche correctement. Mais pourquoi...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Petit up pour relancer le sujet

Discussions similaires

  1. [Reflection] Probleme d'appel newInstance()
    Par SEMPERE Benjamin dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 17/06/2004, 13h15
  2. [Reflection] Exécuter une méthode donnée d'une classe
    Par schousso dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/06/2004, 10h35
  3. [Reflection]Probleme d'InstantiationException
    Par guipom dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 23/05/2004, 23h28
  4. [Reflection][Bean] Appel d'une méthode dynamiquement
    Par eraim dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/04/2004, 11h07
  5. Reflections
    Par Laurent Gomila dans le forum DirectX
    Réponses: 4
    Dernier message: 25/07/2003, 14h42

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