Какие исключения Asp.net могут делать что?
Если я напишу этот код
protected void Page_Load(object sender, EventArgs e)
{
Page_Load(sender, e);
}
Я получаю сообщение об ошибке (бесконечная рекурсия):
и w3wp.exe
процесс прекращен с task manager
,
Хорошо...
Однако, если я делаю:
throw new ApplicationException(); //or SystemException();
это появляется только на обычной странице исключений. (w3wp.exe все еще работает).
вопросы:
- какие исключения приводят к закрытию w3wp.exe?
- какие исключения приводят к закрытию пула приложений?
ps в соответствии с тем, что я только что написал, подумайте о следующем сценарии: я могу написать веб-страницу, разместить свой сайт в ферме сайтов и завершить весь процесс w3wp.exe, создав рекурсию..... (и другие будут иметь проблемы)...
Можете ли вы ответить на мои вопросы?
Благодарю.
3 ответа
Это скорее всего знаменитый StackruException
, Это вызвано бесконечным циклом, так как вы вызываете метод Page_Load
опять и опять.
Из MSDN:
В предыдущих версиях.NET Framework ваше приложение могло перехватывать объект StackruException (например, для восстановления после неограниченной рекурсии). Однако такая практика в настоящее время не рекомендуется, поскольку требуется значительный дополнительный код, чтобы надежно перехватить исключение переполнения стека и продолжить выполнение программы.
Начиная с версии.NET Framework 2.0, объект StackruException не может быть перехвачен блоком try-catch, и соответствующий процесс завершается по умолчанию. Следовательно, пользователям рекомендуется писать свой код для обнаружения и предотвращения переполнения стека. Например, если ваше приложение зависит от рекурсии, используйте счетчик или условие состояния для завершения рекурсивного цикла. Обратите внимание, что приложение, в котором размещается общеязыковая среда выполнения (CLR), может указать, что CLR выгружает домен приложения, в котором возникает исключение переполнения стека, и позволяет соответствующему процессу продолжаться. Для получения дополнительной информации см. Интерфейс ICLRPolicyManager и Обзор хостинга.
Вы можете взглянуть на этот ответ:
/questions/11483414/problema-s-otklyucheniem-pula-prilozhenij-aspnet/11483430#11483430
Причиной исключения является переполнение памяти. Есть много способов, как приложение может вызвать это, нет смысла угадывать конкретные сценарии. Я считаю, что хорошие хостинг-провайдеры должны быть защищены от неправильной работы приложений.
Добавить к ответам, которые доступны. Вы не можете остановить весь процесс, потому что каждый веб-сайт на сервере работает в отдельном домене приложений. так что если ваш код плохо себя ведет, только ваш appdomain будет убит.