Исключение, которое не может быть поймано? - PullRequest
0 голосов
/ 30 сентября 2010

В моих файлах есть следующий код:

В классе Customer.Page:

Try
    If Not SiteContent.CurrentUser(False) Is Nothing Then
        If Not SiteContent.CurrentUser(False).IsAdministrator OrElse SiteVariables.CustomerMode Then
            SiteContent.PageViewManager.Create(New List(Of Control))
        End If
    Else
        SiteContent.PageViewManager.Create(New List(Of Control))
    End If
Catch ex As Heritage.Web.Content.Items.Exceptions.ExceptionGroup
     My.Response.Write(ex.Message & "<br />" & ex.StackTrace & "<br />")
End Try

В элементе класса

Public Overridable Sub CheckValidity()

    'If the item is recycled then return true'

    If IsRecycled() Then
        Exit Sub
    End If

    'ExceptionGroup to store all exceptions which are thrown due to invalid data.'

    Dim ExceptionGroup As New Exceptions.ExceptionGroup
    Try

        'Checks if the item already exists'

        Exists()
    Catch ex As Exception
        'Add any exception as a result of this function to the ExceptionGroup'

        ExceptionGroup.AddException(ex)
    End Try

    'Check each attribute - add any exception which occurs as a result of validating their values to the ExceptionGroup'

    For Each Attribute As Items.Attribute In GetAttributes
        If TypeOf Attribute Is StringAttribute Then
            Dim StringAttribute As StringAttribute = Attribute
            Try
                If Not StringAttribute.Validate(StringAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(StringAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        ElseIf TypeOf Attribute Is IntegerAttribute Then
            Dim IntegerAttribute As IntegerAttribute = Attribute
            Try
                If Not IntegerAttribute.Validate(IntegerAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(IntegerAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        ElseIf TypeOf Attribute Is DateTimeAttribute Then
            Dim DateTimeAttribute As DateTimeAttribute = Attribute
            Try
                If Not DateTimeAttribute.Validate(DateTimeAttribute.Value) Then Throw New Exceptions.ItemExceptions.InvalidFormatException(DateTimeAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        End If
    Next

    'Rollback the transaction if the ExceptionGroup contains any Exceptions'

    If ExceptionGroup.Exceptions.Count > 0 Then
        RollbackTransaction()
        Throw ExceptionGroup
    End If
End Sub

Я знаю, что это может всекажется сложным, но вы должны быть в состоянии сделать вывод, что первый кусок кода ловит ExceptionGroup, брошенный во второй кусок кода.

Это в основном часть системы, где объекты создаются из строк в базе данных каки когда вначале требуется один из объектов (т. е. для каждой строки создается много объектов определенного типа, а затем извлекаются данные для каждого только при первом запросе. Каждый объект хранит экземплярDataRow, из которого атрибуты в объекте извлекают часть данных, в которой они нуждаются, когда значение атрибута впервые запрашивается).

Я хочу сказать, что это система, которую я создал с нуля, без какой-либо третьей стороныкод и не использовать Linq или любые другие причудливые вещи, как это (и я не хочу, прежде чем кто-либо скажет, чтобы переключиться на Linq или что-то в этом роде).

В любом случае группа ExceptionGroup, как вы можете сказать, заполняется другими исключениями, которые вызываются проверкой каждого атрибута.

Теперь проблема в этом.При запуске первого фрагмента кода без оператора try catch он выдает ужасный красно-желтый экран ошибки.Однако с оператором try catch загружается отлично.

Кто-нибудь знает, что может быть причиной этого странного поведения?Кто-нибудь когда-нибудь сталкивался с таким поведением раньше?

Заранее спасибо.

С уважением,

Ричард

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Я думаю, проблема в том, что вы выбрасываете множественные исключения с группой исключений см. этот пост здесь.

Создание нескольких исключений в .Net / C #

0 голосов
/ 27 марта 2012

Если вы не пишете в каркас регистрации. Запись его в ответ может представлять угрозу безопасности. Вы можете использовать log4Net / блок приложения Logging или написать свой собственный простой регистратор, который можно заменить позже. Но никогда не отправляйте информацию об исключениях клиенту.

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