2009-06-03 7 views
3

Actuellement, dans tous nos environnements nous avons healthMonitoring tourné à nous alerter à chaque fois que l'utilisateur a provoqué une erreur:ASP.Net healthMonitoring avec AJAX

<healthMonitoring enabled="true"> 
    <providers> 
    <add name="MailWebEventProvider" type="System.Web.Management.SimpleMailWebEventProvider" to="[email protected]" from="[email protected]" buffer="false" subjectPrefix="prefix: "/> 
    </providers> 
    <rules> 
    <add name="All errors from my site" eventName="All Errors" provider="MailWebEventProvider" profile="Critical"/> 
    </rules> 
</healthMonitoring> 

Nous avons récemment commencé à mettre en œuvre de nouvelles fonctionnalités AJAX, et je juste réalisé toute erreur levée lors d'une mise à jour partielle de la page ne déclenche pas l'healthmonitor d'envoyer l'email. L'utilisateur reçoit la boîte de message d'alerte par défaut(); Cependant, rien du côté serveur.

Est-ce que quelqu'un sait comment l'activer? Je ne suis pas sûr de ce paramètre que je manque

Modifier

Je vois que le contrôle ScriptManager a un événement appelé « AsyncPostBackError ». Si je m'accroche à cela et que je lance "e.Exception", cela déclenchera le moniteur de santé; cependant, il efface l'erreur que l'utilisateur voit. Est-ce que quelqu'un sait comment tirer le moniteur de santé sans lancer une erreur comme celle-ci?

Répondre

2

Je ne sais pas si cela est ce que vous cherchez, mais après avoir regardé here, here et here, il semble que vous pouvez créer des événements web personnalisés que vous pouvez appeler à partir de votre code derrière. Ainsi, vous pouvez appeler ces gestionnaires à partir des fonctions qui provoquent la publication partielle de la page pour laisser une notification sur le serveur.

Vérifiez le premier lien en particulier; Il explique comment créer un événement Web personnalisé.

2

Voulez-vous profiter des suggestions de Matthieu, je suis venu avec ceci:

protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) 
{ 
    ((ScriptManager)sender).AsyncPostBackErrorMessage = e.Exception.Message; 

    WebBaseEvent.Raise(new AjaxWebErrorEvent(e.Exception.Message, null, 100123, e.Exception)); 
} 

Où AjaxWebErrorEvent est la suivante:

public class AjaxWebErrorEvent : WebRequestErrorEvent 
{ 
    public AjaxWebErrorEvent(string message, object eventSource, int eventCode, System.Exception e) 
     : base(message, eventSource, eventCode, e) 
    { 
    } 
}