Проблема перезапуска IIS7 - PullRequest
2 голосов
/ 12 января 2010

У меня есть веб-сервис на одном из моих сайтов, который перезапускает пул приложений для сайтов.

Проблема, которую я получаю, заключается в том, что пул приложений IIS7 останавливается со следующим предупреждением, а затем с ошибкой:

Внимание: Процесс, обслуживающий пул приложений appPoolNameHere, превысил временные ограничения при завершении работы.

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

Код, который я использую для этого:

            try
        {

            var serverManager = new ServerManager();

            var currentPoolName = SettingsManager.AppPoolName;

            if (!string.IsNullOrEmpty(currentPoolName))
                serverManager.ApplicationPools[currentPoolName].Recycle();

            HttpRuntime.Close();
        }
        catch (Exception ex)
        {                
            var exceptionManager = ExceptionManagerFactory.GetExceptionManager();
            exceptionManager.LogException(ExceptionManager.Severities.Critical, ex,
                                          "App Pool restart failed");
        }

Я не получаю никаких исключений здесь, но пул приложений останавливается, это не происходит постоянно и его очень трудно воспроизвести, я пробовал несколько разных вещей, даже просто чертовски из этого сервиса и иногда в другие времена это прекрасно.

Что я могу сделать, чтобы это исправить?

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

Спасибо за любую помощь в этом.

Ответы [ 2 ]

1 голос
/ 12 января 2010

Что ж, похоже, я разобрал (не исправил) проблему с какой-то лентой и липкой задней пластмассой.

Раствор

Изменен параметр пула приложений: Быстрая защита от сбоев на false

Это останавливает IIS от уничтожения пула приложений после нескольких неудачных запросов к нему.

Я также добавил в систему повторных попыток, поэтому, если запрос на переработку завершается неудачно, он ждет 10 секунд и повторяет попытку, он сделает это 5 раз, прежде чем отказаться и отправить уведомление об исключении.

Это устранило проблему, и все, кажется, снова работает хорошо, хотя что-то об этом кричит, что это неправильно !! на меня.

Только если IIS будет отслеживать другие файлы на веб-сайте и перезапускать пул приложений при обнаружении изменений.

0 голосов
/ 12 января 2010

Я не работал с Microsoft.Web.Administration пространством имен, но как насчет выгрузки домена приложения и отправки запроса на ваш сайт, чтобы снова запустить приложение?

Хорошо пример (2-е место) Питера Бромберга, как это сделать.

Update.

Ошибка чтения стека

System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
at Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute()

Я подумал о наиболее распространенной причине: недостаточных прав. Все административные действия требуют административных прав. Когда приведенный выше код выполняется, какая учетная запись пользователя олицетворяется? IUSR? Переключитесь на любого администратора для этого блока, и он должен работать без исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...