Есть ли способ вернуть ошибку 500.13 из IIS? Мне нужно проверить пользовательскую страницу ошибки на ошибку 500.13.
В любом случае, чтобы имитировать ошибку занятости сервера 500.13 на iis 7?
Ответы (5)
Вы не можете вызвать ошибку «сервер занят» из кода. Вы можете смоделировать коды ошибок, как показано в другом ответе, но это не позволит вам определить, будет ли ваша пользовательская страница ошибок отображаться правильно, поскольку весь смысл ошибки «сервер занят» заключается в том, что код не может быть выполнен - так что это очень безопасное предположение, что IIS сделает что-то другое, чтобы вызвать такую ошибку.
Но из того, что я вижу, ошибка 500.13 была вызвана приложениями ASP, а не ASP.NET. Вместо этого для приложений ASP.NET вы увидите ошибку 503 Service Unreachable.
Вы можете активировать код состояния 503 следующим образом:
- Откройте IIS Management Studio, перейдите в раздел «Пулы приложений», откройте «Дополнительные параметры» для своего пула приложений и измените длину очереди на 10 (минимум).
- В приложении ASP.NET добавьте вызов
Thread.Sleep(50000)
. - Теперь начните стучать по веб-серверу — довольно скоро вы получите ошибку 503 Service Unreachable.
Я не верю, что IIS включает в себя моделирование ошибок, однако существуют приложения для сравнительного анализа/нагрузочного тестирования, которые вы можете использовать. Единственным недостатком этого является то, что вам придется на самом деле подвергать свой (тестовый?) сервер реальной нагрузке до тех пор, пока IIS не "сломается".
Во-первых, следует уменьшить размер пула приложений IIS до минимально доступного.
Я предлагаю вам использовать JMeter от Apache. Это относительно просто получить ручку и использовать.
После того, как вы загрузили и запустили его, вот основные шаги для проведения стресс-тестирования:
Добавить "группу тем" – то, благодаря чему все это заработает
Установить параметры группы потоков — здесь вы устанавливаете количество одновременных потоков (т.е. пользователей)
Добавить HTTP-запрос в группу потоков – это тестовый шаг.
Установите параметры HTTP-запроса. здесь вы указываете веб-адрес (localhost, www.yourdomain.com и т. д.) вместе с любой другой необходимой вам конфигурацией
Добавить отчеты. Отчеты — это то, как вы просматриваете результаты, а также запросы и ответы сервера
Запустите план тестирования и просмотрите результаты
Наконец, когда вы запустите тест и просмотрите ошибки, вы можете перейти на свой сервер в предпочитаемом вами браузере и просмотреть результаты в реальном времени.
ИЗМЕНИТЬ
Если у вас есть доступ к нескольким компьютерам/серверам, вы даже можете попробовать распределенное стресс-тестирование. Учебник доступен на их сайте.
Поместите это в событие Page_Init:
protected void Page_Init(object sender, EventArgs e)
{
Response.Clear();
Response.StatusCode = 500;
Response.SubStatusCode = 13;
throw new Exception();
}
Но, насколько мне известно, невозможно установить ошибку субкода в разделе customErrors
Web.config. Однако вы можете проверить подкод в событии Global.asx Application_Error:
int subCode = HttpContext.Current.Response.SubStatusCode;
Если следовать логике, можно смоделировать любую ошибку IIS.
Вы можете использовать фреймворк для имитации нагрузки. Selenium Grid может помочь.
Visual Studio Team System также может имитировать нагрузку, однако это не бесплатно.
Взгляните на Нагрузочное тестирование с помощью Visual Studio Team System
Это аналогичный вопрос на StackOverflow. Соответствует ли это тому, чего вы пытаетесь достичь? Подделка кодов состояния Http в IIS/.net для тестирования