Section courante

A propos

Section administrative du site

Utilisation d'ELMAH avec ASP.NET AJAX

Cette page décrit le module MsAjaxDeltaErrorLogModule introduit avec ELMAH 1.0 BETA 3.

Le problème

La première version d'ASP.NET AJAX, écrite avec la version 2.0 du .NET Framework (v1.0.61025.0), n'est malheureusement pas entièrement compatible avec ELMAH. Lorsqu'une exception non gérée se produit lors d'un postback partiel, le code d'origine l'intercepte et appelle sans ménagement Response.End(), empêchant ELMAH de la capturer. Ce code est visible depuis Reflector en consultant la méthode System.Web.UI.PageRequestManager.OnPageError dans System.Web.Extensions.dll :

  1. private void OnPageError(object sender, EventArgs e)
  2. {
  3.     ...
  4.     if (flag)
  5.     {
  6.         ...
  7.         this._owner.IPage.Response.End();
  8.     }
  9. }

La solution

Pour résoudre ce problème, vous pouvez ajouter le module MsAjaxDeltaErrorLogModule à votre application comme suit :

<httpModules>
    <!-- 
        Cette entrée est réservée à l'utilisation d'ASP.NET AJAX v1.0.x.x et à la capture des 
          erreurs lors des postbacks partiels. Elle n'est pas requise pour la version d'ASP.NET AJAX 
          fournie avec .NET Framework v3.5 !
    -->
    <add name="MsAjaxDeltaErrorLog" type="Elmah.MsAjaxDeltaErrorLogModule, Elmah"/>
</httpModules>

Ce module vérifie si la requête en cours est un PostBack partiel et, si tel est le cas, configure un gestionnaire alternatif pour capturer toute exception non gérée.

Problèmes potentiels

Malheureusement, le module MsAjaxDeltaErrorLogModule n'est pas une solution idéale. De par son fonctionnement, il existe une très faible probabilité que des erreurs soient journalisées deux fois dans ELMAH. Pour que cela se produise, les conditions suivantes doivent être réunies :

En réalité, les chances que cela se produise sont assez minces.

.NET Framework 3.5

Une version mise à jour de Microsoft Ajax a été fournie avec la version 3.5 de .NET Framework. Cette nouvelle version a modifié la gestion des erreurs inattendues dans les postbacks partiels, en supprimant l'appel à Response.End. Par conséquent, si vous continuez à utiliser le module MsAjaxDeltaErrorLogModule avec cette version du cadre d'application, toutes les erreurs non gérées dans les postbacks partiels seront journalisées deux fois dans ELMAH.



Dernière mise à jour : Mercredi, le 23 novembre 2022