ASP.Net HealthMonitoring с помощью AJAX - PullRequest
3 голосов
/ 03 июня 2009

В настоящее время во всех наших средах включен мониторинг работоспособности, чтобы предупредить нас, когда пользователь вызвал ошибку:

<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», он отключит монитор работоспособности; однако, это стирает ошибку, которую видит пользователь. Кто-нибудь знает, как запустить монитор работоспособности, не выдавая такую ​​ошибку?

Ответы [ 2 ]

2 голосов
/ 03 июня 2009

Следуя советам Мэтью, я придумал следующее:

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)
    {
    }
}
2 голосов
/ 03 июня 2009

Не уверен, что это то, что вы ищете, но после просмотра здесь , здесь и здесь , похоже, вы можете создать пользовательский веб события, которые вы можете вызвать из вашего кода. Таким образом, вы можете вызывать эти обработчики из функций, заставляющих частичный постбэк оставлять уведомление на сервере.

Проверьте первую ссылку особенно; в нем подробно рассказывается, как создать пользовательское веб-событие.

...