Проблема перезапуска IIS7

2

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

Проблема Im get - это пул приложений 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-адресов, который обновляется из системы администратора.

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

  • 0
    Я сказал неправду выше, я получаю сообщение об ошибке: Сообщение об исключении: Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)). Дополнительная информация Не удалось перезапустить пул приложений. Сведения об исключении System.UnauthorizedAccessException: доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) в Microsoft.Web.Administration.Interop.IAppHostMethodInstance.Execute () в Microsoft.Web.Administration.ConfigurationElement.ExecuteMethod (String methodName) (Microsoft.Wol.AdP.) В Microsoft.Wol.AdPlication на GeneralServices.RestartAppPool ()
Теги:
iis-7

2 ответа

1
Лучший ответ

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

Решение

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

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

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

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

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

0

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

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

Обновить.

Чтение стек ошибок

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

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

  • 0
    Я думаю, что это то, как вы делаете это для IIS6, так как нет прямой связи с IIS6 из .net
  • 0
    Но почему это не должно работать на IIS7? Я добавил обновление с одной идеей после чтения стека ошибок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню