В классическом ASP существует ли способ обработки ошибок на уровне приложений?

В классическом ASP существует ли способ обработки ошибок на уровне приложения?

Есть ли рекомендации по обработке ошибок/исключений в классическом ASP 3? Server.GetLastError() не много для работы с...

Я ищу что-то вроде Application_Error(), найденного в ASP.Net Global.asax.

Любой эквивалент в global.asa? Классы, чтобы разумно регистрировать ошибку? Подобно старой обработке исключений для библиотеки ASP для ASP3...

Эй, я мечтатель!

Большое спасибо за любые указатели

Ответ 1

try:
    some code that can raise an error
except:
    do error handeling stuff
finally:
    clean up, close files etc

Можно эмулировать в vbscript следующим образом:

class CustomErrorHandler
    private sub class_terminate
        if err.number > 0 then
            do error handeling stuff
        end if 
        clean up, close files etc
    end sub
end class    


with new CustomErrorHandler
    some code
    ...
end with    

Как это работает? Метод "class_terminate" будет вызываться, когда вновь созданный экземпляр выходит за рамки. Это происходит, когда интерпертер попадает в оператор "конец с" или когда callstack разматывается из-за ошибки. Он менее симпатичный, чем нативный подход к python, но он работает достаточно хорошо и не уродлив.

Для обработки ошибок верхнего уровня вы можете использовать ту же технику. На этот раз не используйте оператор with, но создайте глобальный экземпляр вашего обработчика ошибок. Помните, что объект ASPError, предоставленный server.getLastError(), не совпадает с объектом vbscript err и доступен только после того, как IIS выполнил свой server.transfer с обработчиком ошибок 500: 100 и вернулся на вашу страницу, чтобы собрать мусор. Обработчик примера:

class cDebugger
  public sub do_debug
     ' print debug data here
  end sub
  public sub class_terminate
    if server.getlasterror().Number <> 0 then
        response.clear
        call do_debug
    end if
  end sub
end class

Ответ 2

К сожалению, Global.ASA предоставляет только методы Application_OnStart, Application_OnEnd, Session_OnStart and Session_OnEnd. Нет обработки ошибок.

Самое близкое, что вы можете получить (AFAIK) использует функцию Custom Errors в IIS, чтобы указать на другой файл или URL-адрес для обработки ошибки.

Custom Errors Image

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

Ответ 3

Я сопоставляю страницу ошибок 500 в IIS с настраиваемой страницей обработки ошибок .asp. Затем эта страница использует Server.GetLastError для получения последней ошибки. Отправьте мне электронное письмо с подробной информацией об ошибке, строке запроса, переменных сервера и т.д. Затем оно отображает дружественное сообщение пользователю.