目前,在我们所有的环境中,我们都会启用健康监控功能,以便在用户导致错误时提醒我们:
<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功能,我刚刚意识到在部分页面更新期间抛出的任何错误都不会触发运行状况监视器发送电子邮件。用户获取默认的alert()消息框;但是,服务器端没有任何内容。
有谁知道怎么开启?我不确定我缺少什么设置
修改
我看到ScriptManager控件有一个名为“AsyncPostBackError”的事件。如果我挂钩并执行“throw e.Exception”,它将触发健康监视器;但是,它会删除用户看到的错误。有没有人知道如何在不抛出这样的错误的情况下触发健康监视器?
答案 0 :(得分:2)
不确定这是否是您要查找的内容,但在查看here,here和here后,您似乎可以创建可以从中调用的自定义Web事件你的代码背后。因此,您可以从导致部分页面回发的函数调用这些处理程序,以在服务器上留下通知。
特别检查第一个链接;它详细介绍了如何构建自定义Web事件。
答案 1 :(得分: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)
{
}
}