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 :

Gérer une erreur dans un fichier de configuration


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut Gérer une erreur dans un fichier de configuration
    Salut à tous,

    J'ai une petite appli console avec un fichier de configuration afin que l'utilisateur puisse modifier certains paramètres de l'appli sans devoir modifier le code source à chaque fois.
    L'appli est lancée à fréquence régulière via une tâche planifiée.
    J'ai donc besoin d'informer quelqu'un par mail en cas d'erreur dans l'execution, afin de corriger et relancer la tâche.
    Comme l'utilisateur (un seul et formé) peut modifier ce fichier de config, je fais des tests pour valider que tous les éléments sont bien présents dans le fichier de config.
    Or, je me dis qu'il pourrait modifier par erreur la section appsettings avec un truc du genre:
    <appSettings2>
    les paramètres
    </appSettings>
    Et c'est là que j'ai un problème (bien entendu quand il y une erreur du type mentionné ci-dessus)
    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
    {
    string test=ConfigurationManager.AppSettings["RC_File"];
    }
    catch
    {
    MailMessage mail = new MailMessage();
    ....
    }
    et il me lève une exception ConfigurationErrorsException (echec de l'initialisation du système de configuration) sur la ligne MailMessage.

    Comment puis-je faire pour gérer cette erreur (qui est une erreur de structure du fichier de config) ?

    J'espère que vous allez pouvoir m'aider parce que là, j'ai rien trouvé et je sèche vraiment.

    Merci d'avance.

  2. #2
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Si tu souhaites gerer cette erreur differemment des autres exception, fais deux catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    catch(ConfigurationErrorsException configException)
    {
    //Stopper l'execution, avertir l'utilisateur et informer l'admin de l'erreur par mail
    }
     
    catch(Exception ex)
    {
     
    }
    C'est ce que je comprend de tes attentes, je me trompe peut-etre, car ce n'est pas tres clair.

    PS : desole clavier UK

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Merci,

    Mais en fait c'est bien çà le problème.
    J'arrive à intercepter l'erreur ConfigurationErrorsException et donc stopper l’exécution, çà c'est pas un problème.
    Mais à ce moment là (donc dans mon catch), il met l'erreur sur MailMessage.
    Je crois comprendre que s'il y a une erreur dans le fichier de config, il ne peut pas instancier MailMessage.

    Par exemple, il faudrait qu'en cas d'erreur de structure du fichier de config, il considère qu'il ne doit pas intégrer ce fichier de config dans l’exécution.
    Ou aussi, une autre approche, vérifier la structure du fichier avant.

    J'espère que c'est un peu plus clair.

  4. #4
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Tu peux poster ton fichier de configuration ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Voilà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="mail_adresses" value="C:\Users\fichier.csv"/>
        <add key="RC_file" value="C:\Users\fichier.csv"/>
        <add key="Mail_RQ" value="mail@mail.com"/>
        <add key="mail_object" value="Relance"/>
        <add key="mail_corps" value="Test corps"/>
      </appSettings>
    </configuration>

  6. #6
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Peux tu également poster l'erreur et la totalité de ton catch?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Salut,

    Voici la totalité de l'erreur (je précise que c'est volontairement que je mets appSettings2 pour justement générer l'erreur.

    System.Configuration.ConfigurationErrorsException was caught
    HResult=-2146232062
    Message=Échec de l'initialisation du système de configuration
    Source=System.Configuration
    BareMessage=Échec de l'initialisation du système de configuration
    Line=0
    StackTrace:
    à System.Configuration.ConfigurationManager.PrepareConfigSystem()
    à System.Configuration.ConfigurationManager.GetSection(String sectionName)
    à System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
    à System.Net.Configuration.SmtpSectionInternal.GetSection()
    à System.Net.Mail.SmtpClient.get_MailConfiguration()
    à System.Net.Mail.MailMessage..ctor()
    à Relance_CSM.MyMail.ITSupportMail() dans C:\Users\moi\OneDrive Entreprise\Visual Studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\Program.cs:ligne 275
    InnerException: System.Configuration.ConfigurationErrorsException
    HResult=-2146232062
    Message=Section de configuration non reconnue appSettings2. (C:\Users\moi\OneDrive Entreprise\Visual Studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\bin\Debug\file.vshost.exe.Config line 3)
    Source=System.Configuration
    BareMessage=Section de configuration non reconnue appSettings2.
    Filename=C:\Users\moi\OneDrive Entreprise\Visual Studio 2010\Projects\ConsoleApplication2\ConsoleApplication2\bin\Debug\file.vshost.exe.Config
    Line=3
    StackTrace:
    à System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
    à System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
    à System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
    à System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
    InnerException:
    Et voilà le code complet défactorisé:
    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
     
    try
                {
                    string test = ConfigurationManager.AppSettings["mail_adresses"];
                }
                catch
                {
                    try
                    {
                        MailMessage mailIT = new MailMessage();
     
                    }
                    catch
                    {
                        Console.Write("bla, bla,bla");
                        Console.Read();
                    }
                }
    Donc, l'erreur apparait sur le premier try, passe la main au catch et de nouveau erreur sur le try MailMessage pour finir à afficher la console.

  8. #8
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    L'envoi de mail est basé sur le fichier de configuration c'est bien ça?
    Dans ce cas, lors de la vérification de ce fichier de configuration, tu utilises un second fichier pour ton MailMessage, celui-ci non midifable, ou réservé à un administrateur ou peu importe commen tu souhaite gérer.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Non, non, l'envoi de mail n'a pas besoin du fichier de config, c'est un cas particulier où l'adresse mail est "en dur" dans le code.

  10. #10
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    On voit bien d’après le message d'erreur que tu as posté, que tu as 2 erreurs distinct.
    La première, celle que tu attends, se trouve dans le InnerException de la seconde, qui elle est déclenchée par le constructeur de ton MailMessage à System.Net.Mail.MailMessage..ctor().
    J'aurais tendance à dire que le MailMessage essaye d'accéder à un fichier de config, mais sans le code de cette classe difficile d'en dire plus.
    Une chose est sur pour moi, MailMessage est en cause.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  11. #11
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Ta classe MailMessage utilise bien le fichier de configuration pour définir les destinataires et le contenu du message non?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    MailMessage est une classe fournie.
    Elle n'utilise pas les infos du fichier de config.
    C'est directement à l'instanciation que ca plante. Je pense donc vraiment que sans lecture correcte du fichier de config attaché à l'appli, l'appli ne peut pas poursuivre.
    La solution passerait par une verif du fichier et en cas d'erreur à la lecture, dire "on oublie" et on fait comme s'il n'y en avait pas.
    Mais çà, je sais pas faire, des idées?
    Merci

  13. #13
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,
    Effectivement c'est une classe du Framework .NET , j'étais partis du postulat que c'était une de vos classe perso.

    Donc, comme on le disais dans nos précédent poste, le constructeur par défaut de cette classe va chercher des informations dans un fichier de config, en l’occurrence, il essaye de renseigner le 'From' du message depuis un fichier de config.
    Par chance pour toi, il existe d'autre constructeur pour cette classe qui devrait faire ce que tu veux.
    Regarde dans la doc de MailMessage

    - Soit tu utilise le constructeur sans paramètre mais tu dois renseigner le fichier de config.
    - Soit tu utilise l'un des constructeurs prenant en paramètre les infos que tu devra renseigner directement.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  14. #14
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    J'ai fait la même erreur

    Plus d'explications ici : http://stackoverflow.com/questions/1...nstructor-work

Discussions similaires

  1. [Batch] modifier une ligne dans un fichier de configuration (hmailserver)
    Par amidevous dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/02/2013, 13h12
  2. Remplacer une ligne dans un fichier de configuration
    Par morgan47 dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2008, 13h15
  3. erreur dans le fichier de configuration
    Par amen_1919 dans le forum Installation
    Réponses: 4
    Dernier message: 14/04/2008, 19h40
  4. [D7],[Access],[ADO],enregistrer une erreur dans un fichier log
    Par iam dans le forum Bases de données
    Réponses: 9
    Dernier message: 16/04/2007, 18h24
  5. Réponses: 1
    Dernier message: 17/09/2006, 10h45

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