Analyste Développeur en .Net
Article tagué Asp.Net
Comment gérer les exceptions en Asp.net
27/05/10
Situation
Quand on met son site en ligne, on a parfois des erreurs qu’on n’a pas su gérer, ce qu’on appelle une exception, par exemple la base de données qui ne répond pas.
Pour comprendre comment elles ont eu lieu, il faut pouvoir logguer ces exceptions.
Pour corriger le problème rapidement, le site enverra un email à l’administrateur.
Elmah
Elmah permet de répondre à tous ces besoins.
Voici la procédure a faire pour intégrer Elmah à votre projet :
1e étape: Télécharger Elmah
Pour cela cliquer ici, la version que j’utilise présentement est la version 1.1.
2e étape: Ajouter la référence à votre projet
Menu Project / Add Reference, puis ajouter Elmah.dll
3e étape: Modifier la web.config
Ajouter dans la section ConfigSections:
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup> |
Ajouter dans la section HttpHandlers:
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> |
Ajouter dans la section HttpModules:
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/> |
Configurer le serveur SMTP, si ce n’est pas déjà fait:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="DoNotReply@XXX.com">
<network host="smtp.XXX.com" defaultCredentials="true" userName="X" password="X" />
</smtp>
</mailSettings>
</system.net> |
Ajouter la section elmah dans la section Configuration:
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\Temp" />
<errorMail from="error@XXXX.com" to="administrator@XXXX.com" priority="High" />
</elmah> |
Ajouter la section location dans la section Configuration:
<location path="elmah.axd">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location> |
4e étape: Tester
Ajouter le code suivant dans le Page_Load de la page:
Throw New Exception("This is a test") |
Compiler et ré-afficher la page.
Une exception est détectée, un mail est envoyé et une entrée dans le fichier xml a été ajoutée.
Allons plus loin
Filtrer les erreurs
Elmah permet de filtrer les erreurs interceptées.
Ainsi on ne voudra pas logguer les erreurs 404 ou encore les exceptions de Type FieldAccessException par exemple. Pour cela, il faut modifier la section elmah dans la web.config de la manière suivante:
<pre lang="config">
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\Temp" />
<errorFilter>
<test>
<or>
<equal binding="HttpStatusCode" value="404" type="Int32" />
<is-type binding="BaseException" type="System.FieldAccessException" />
</or>
</test>
</errorFilter>
<errorMail from="error@XXXX.com" to="administrator@XXXX.com" priority="High" />
</elmah> |
Visionner les erreurs
Elmah offre une interface web pour visionner les exceptions, pour cela ouvre la page http://localhost/elmah.axd, voici un exemple du rendu:
Comment gérer plusieurs web.config facilement?
26/04/10
Situation
Quand on développe des sites internet on a souvent des configurations différentes. Il devient vite difficile de s’y retrouver. Pour me faciliter la vie j’ai trouvé une solution simple et efficace qui ne demande l’installation d’aucun add-on supplémentaire.
Prenons pour exemple la situation suivante:
- Debug: configuration par défaut utilisé sur le poste du développeur,
- Deploy: configuration du serveur de développement,
- Release: configuration du serveur de production.
Ajouter une nouvelle solution de configuration
Tout d’abord on ajouter la nouvelle solution de configuration nommée Release (disponible dans le menu build/ConfigurationManager).
On aura ainsi dans la liste déroulante 3 solutions de configuration :
Créer les fichiers de configuration
Copier trois fois la configuration actuelle dans le répertoire du projet, puis nommer les de la manière suivante:
- web.debug.config
- web.deploy.config
- web.release.config
Ligne de commande
Ensuite dans l’onglet Compile des propriétés du Projet, ajoutez la ligne suivante dans Pre-build event command line:
copy "$(ProjectDir)\web.$(ConfigurationName).config" "$(ProjectDir)\web.config" /y |
Cette ligne de commande remplacera le fichier web.config par le fichier de configuration correspondant à la solution de configuration choisie.
Les nice to have
Un fichier de backup
Vous venez de modifier le fichier web.config, vous compilez et malheur vous vous rendez compte que votre configuration a été effacée.
Pour remédier à ce problème, j’ai modifiier la ligne de commande de la manière suivante:
copy "$(ProjectDir)\web.config" "$(ProjectDir)\web.config.bak" /y copy "$(ProjectDir)\web.$(ConfigurationName).config" "$(ProjectDir)\web.config" /y |
Ainsi a chaque compilation, une copie de web.config est faite dans le fichier web.config.bak.
Personnaliser votre barre d’outils
Pour faciliter votre vie de développeur, Visual Studio permet de personnaliser la barre d’outils.
Pour cela, faites un clic droit sur la barre d’outils et cliquez sur Customize puis sur l’onglet Commands, sélectionnez la catégorie Build puis ajoutez à votre barre d’outils la command Solution Configurations

