2015-12-22 2 views
2

Когда мой сервер базы данных опускается, это приводит к сбою IIS, на котором запущено приложение MVC на другом сервере.Как предотвратить «503 Service Unavailable», когда база данных не работает

Все страницы затем показывают ошибку HTTP 503: служба недоступна.

Мне нужно решение, например, помещение обработчика ошибок в global.asax, например Application_Error(), но это не соответствует моим потребностям. Как я могу обработать этот случай, чтобы вместо сбоя мое приложение показывало конкретные страницы ошибок для каждой ошибки.

+0

Это решаемая проблема и довольно проста в реализации. Попробуйте использовать перепадающий кластер и балансировщик нагрузки. база данных будет зеркально отражена на 2 (или более) серверах базы данных - если один из них опустится, другой ответит на запрос. https://msdn.microsoft.com/en-us/library/ms189134.aspx – user1666620

+0

, если вы используете резервную базу данных, и это отражает изменения в 1-й базе данных, вы не используете только свою собственную версию кластеризации - в в каком случае, почему бы просто не полностью реализовать существующее решение? – user1666620

+0

@ пользователь1666620 спасибо. Я с нетерпением жду реализации SqlAlwaysOn –

ответ

1

Как объясняется в What possibilities can cause "Service Unavailable 503" error? и TechNet: 503-Service Unavailable (IIS 6.0), существует множество возможных причин ошибки 503.

В вашем случае это «rapid-fail protection» IIS. Ваше приложение вылетает из рабочего процесса, и это происходит столько раз в течение короткого промежутка времени, что сервер предполагает, что что-то по своей сути неправильно с вашим приложением, и закрывает пул приложений.

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

В то же время вы можете предотвратить сбой, добавив операторы try-catch в соответствующие места или добавив глобальный обработчик исключений в Application_Error.

Смежные вопросы