Как я могу все еще войти с asp.net healthMonitoring Исключение, которое было Catch? - PullRequest
1 голос
/ 02 сентября 2011

Я настроил HealthMonitoring в своем веб-приложении для регистрации всех исключений в базе данных.

Но когда я изящно обрабатываю некоторые исключения, показывая пользователю приятное сообщение, они не регистрируются в базе данных. Если я что-то наподобие Throw ex, отобразится стандартная страница с ошибкой, и ошибка не будет корректно обработана.

Есть ли что-то еще, что я мог бы добавить в конце моего обработчика ошибок, чтобы система также регистрировала эту ошибку?

вот пример кода:

Dim errorText As String = "Doing Something"
Try
   'Do Something

Catch ex As Exception
        DataActionError.Text = String.Format("There was a problem {0}. ", errorText)
        DataActionError.Visible = True
        'add something here?
End Try

и раздел healthMonitoring моего web.config:

<healthMonitoring enabled="true">
  <eventMappings>
    <clear />
    <add name="All Errors" 
         type="System.Web.Management.WebBaseErrorEvent"
         startEventCode="0" 
         endEventCode="2147483647" />
  </eventMappings>

  <providers>
    <clear />
    <add connectionStringName="MyConnectionString"
         maxEventDetailsLength="1073741823"
         buffer="false" 
         name="SqlWebEventProvider"
         type="System.Web.Management.SqlWebEventProvider" />
  </providers>

  <rules>
    <clear />
    <add name="All Errors To Database" 
         eventName="All Errors" 
         provider="SqlWebEventProvider"
         profile="Default" 
         minInstances="1" maxLimit="Infinite" 
         minInterval="00:00:00" />
  </rules>
</healthMonitoring>

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Вы можете инициировать свои собственные события, которые затем будут использоваться поставщиками.
Вы не можете поднять WebBaseErrorEvent самостоятельно, но вы можете создать пользовательское веб-событие и настроить свою конфигурацию, чтобы захватить его тоже. См
http://msdn.microsoft.com/en-us/library/ms998306
http://msdn.microsoft.com/en-us/library/ms227980.aspx

0 голосов
/ 07 сентября 2011

Вот код, который я использовал для создания и создания своего пользовательского веб-события.

обновленный пример кода:

Dim errorText As String = "Doing Something"
Try
   'Do Something

Catch ex As Exception
    Dim ErrorDescr As String = String.Format("There was a problem {0}", errorText)
    DataActionError.Text = ErrorDescr 
    DataActionError.Visible = True

    Dim ErrorEvent As CustomWebEvents.HandeledExceptionWebAuditEvent = _
            New CustomWebEvents.HandeledExceptionWebAuditEvent(ErrorDescr , Ex)
    ErrorEvent.Raise()

End Try

Код класса HandeledExceptionWebAuditEvent (Примечание, Я должен был поставить этов отдельной сборке, чтобы сделать эту работу .):

using System;
using System.Web.Management;

namespace CustomWebEvents
{
    public class HandeledExceptionWebAuditEvent : WebAuditEvent
    {
        private Exception _ex;

        public HandeledExceptionWebAuditEvent(string msg, Exception ex)
            : base(msg, ex.Source, WebEventCodes.WebExtendedBase + 1)
        {
            _ex = ex;
        }

         public override void FormatCustomEventDetails(WebEventFormatter formatter )
         {
            base.FormatCustomEventDetails(formatter);
            formatter.AppendLine("Activity Description: Handeled Exception");
            formatter.AppendLine("Message:" + base.Message);
            formatter.AppendLine("Exception Message:" + _ex.Message);
            formatter.AppendLine("Exception StackTrace:" + _ex.StackTrace);
         }

    } 

}

Обновлен раздел healthMonitoring моего web.config:

<healthMonitoring enabled="true">
  <eventMappings>
    <clear />
    <add name="All Errors" 
         type="System.Web.Management.WebBaseErrorEvent"
         startEventCode="0" 
         endEventCode="2147483647" />
    <add name="Handeled Exception"
         type="CustomWebEvents.HandeledExceptionWebAuditEvent, CustomWebEvents"
     />
  </eventMappings>

  <providers>
    <clear />
    <add connectionStringName="MyConnectionString"
         maxEventDetailsLength="1073741823"
         buffer="false" 
         name="SqlWebEventProvider"
         type="System.Web.Management.SqlWebEventProvider" />
  </providers>

  <rules>
    <clear />
    <add name="All Errors To Database" 
         eventName="All Errors" 
         provider="SqlWebEventProvider"
         profile="Default" 
         minInstances="1" maxLimit="Infinite" 
         minInterval="00:00:00" />

    <add name="Handeled Exception To Database" 
         eventName="Handeled Exception" 
         provider="SqlWebEventProvider"
         profile="Default" 
         minInstances="1" maxLimit="Infinite" 
         minInterval="00:00:00" />

  </rules>
</healthMonitoring>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...