Какие исключения 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 будет убит.

Другие вопросы по тегам