HttpContext.Current.Server.GetLastError не работает в IIS 7 - PullRequest
0 голосов
/ 02 июля 2010

Я просто пытаюсь вывести подробности ошибки приложения на своей странице ошибок. В global.asax у меня есть некоторая обработка, а затем server.transfer на мою страницу с этим кодом:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Get exception details
    Dim ex As Exception = HttpContext.Current.Server.GetLastError()

    If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
        ex = ex.InnerException
    End If

    If ex Is Nothing Then
        lblError.Text = "<p>An unknown error occurred.</p>"
    Else
        'Determine what type of error we're dealing with
        If TypeOf ex Is System.Data.SqlClient.SqlException Then
            'A database-related exception...
            lblError.Text = String.Format("<p>The database is having problems... please try your submission again later.<br />{0}</p>", ex.Message)
        ElseIf TypeOf ex Is ApplicationException Then
            'An ApplicationException has occurred
            lblError.Text = String.Concat("<p>An application fault has been tripped:<br /> {0}</p>", ex.Message)
        Else
            'For all others, display the StackTrace
            lblError.Text = String.Format("<p>An unknown error occurred. The following dump of exception information can be used to diagnose the issue</p><p class=""stackTrace""><strong>Exception:</strong> {0}</p><p class=""stackTrace""><strong>Message:</strong> {1}</p><p class=""stackTrace""><strong>Stack Trace:</strong><br />{2}</p>", ex.GetType().ToString(), ex.Message, ex.StackTrace.Replace(System.Environment.NewLine, "<br />"))
        End If
    End If

End Sub

Локально работает отлично. При развертывании на нашем компьютере с Windows Server 2008 под управлением IIS 7 условие ex никогда не срабатывает. Я предполагаю, что эта проблема связана с версией IIS - просто потому, что я видел несколько других сообщений в том же духе, но никаких решений. Если у кого-то есть мысли о том, как я могу выполнить сброс сообщения об ошибке, я был бы признателен. Я хотел бы знать, почему это происходит также. Я имею в виду, исправление это здорово, но мне любопытно, почему.

Ответы [ 2 ]

0 голосов
/ 03 июля 2010

Другой подход заключается в использовании в web.config нового параметра redirectMode, введенного в ASP.NET 3.5 SP1.

redirectMode="ResponseRewrite" режим позволяет загрузить страницу ошибок без перенаправления браузера, URL остается прежним, и исключение будет не теряйся.

Это ответ на Страница настраиваемой ошибки ASP.NET - Server.GetLastError () является нулевым вопрос. См. Это для более подробной информации.

0 голосов
/ 03 июля 2010

Была очень похожая известная ошибка в Vista, которая предположительно была исправлена ​​в SP1, но похоже, что это же исправление еще не входит в состав Windows 2008 Server.Однако существует обходной путь - если на пользовательскую страницу (см. Ниже) установить свойство ошибка по умолчанию (в настройках IIS -> Страницы ошибок -> Изменить параметры функции ...), IIS будет вызыватьэта страница всякий раз, когда ошибка не обрабатывается явно настроенным обработчиком кода состояния (поэтому ваши обработчики 404 и т. д. все еще будут работать) - но по какой-то причине обработка ошибки таким образом означает Server.GetLastError () по-прежнему работает правильно.

См. исходное сообщение в блоге: Развлечения с Server.GetLastError () в классическом ASP на Windows Server 2008 .

Полагаю, этопохоже на ваш случай и может вам тоже помочь.

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