3

目前,在我们所有的环境中,我们都打开了 healthmonitoring 以在用户导致错误时提醒我们:

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

我们最近开始实现更多的 AJAX 功能,我刚刚意识到在部分页面更新期间抛出的任何错误都不会触发 healthmonitor 发送电子邮件。用户获取默认的 alert() 消息框;但是,服务器端没有任何内容。

有谁知道如何打开这个?我不确定我缺少什么设置

编辑

我看到 ScriptManager 控件有一个名为“AsyncPostBackError”的事件。如果我抓住它并执行“抛出 e.Exception”,它将触发运行状况监视器;但是,它会删除用户看到的错误。有谁知道如何在不抛出这样的错误的情况下启动健康监视器?

4

2 回答 2

2

不确定这是否是您要查找的内容,但在查看hereherehere之后,您似乎可以创建自定义 Web 事件,您可以从后面的代码中调用这些事件。因此,您可以从导致部分页面回发在服务器上留下通知的函数中调用这些处理程序。

特别检查第一个链接;它详细介绍了如何构建自定义 Web 事件。

于 2009-06-03T14:02:21.800 回答
2

根据马修的建议,我想出了这个:

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)); 
}

AjaxWebErrorEvent 是这样的:

public class AjaxWebErrorEvent : WebRequestErrorEvent
{
    public AjaxWebErrorEvent(string message, object eventSource, int eventCode, System.Exception e) 
        : base(message, eventSource, eventCode, e)
    {
    }
}
于 2009-06-03T15:31:32.103 回答