Неустранимая ошибка связи со службой активации процессов Windows

#asp.net #authentication #iis

#asp.net #проверка подлинности #iis

Вопрос:

У меня есть приложение .NET WebAPI, работающее локально на IIS моего компьютера для разработчиков, но если я разверну его на сервере, я получу сообщение об ошибке

Ошибка HTTP 503. Служба недоступна.

всякий раз, когда я пытаюсь получить доступ к API. В тот же момент AppPool останавливается (да, он запущен правильно и работает правильно, пока я не выполню вызов API), и я получаю сообщение об ошибке в программе просмотра событий:

Процесс, обслуживающий пул приложений ‘MyNewTestAppPool’, получил фатальную ошибку связи со службой активации процессов Windows.

Контроллер, который я вызываю, действительно сложный:

 public class ExampleController : ApiController
{
    [HttpGet]
    public bool GetTrue()
    {
        return true;
    }
}
 

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

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

Для достижения этого гибридного режима я сделал следующее:

  • в Web.config я добавил <authentication mode="Windows" />
  • в IIS я включил как анонимную проверку подлинности, так и проверку подлинности Windows
  • в Global.asax.cs я добавил атрибут AuthorizeAttribute для всех контроллеров: GlobalConfiguration.Configuration.Filters.Add(new System.Web.Http.AuthorizeAttribute());
  • единственная функция, которая должна быть доступна без проверки подлинности, получила [AllowAnonymous] набор атрибутов.

Не уверен, что там происходит, кто-нибудь знает, что происходит или как это отладить?

Комментарии:

1. Значит, этот API работает в IIS правильно, если вы удалите аутентификацию и разрешите только анонимный доступ?

2. Нет, API корректно работает в IIS на моем компьютере разработчика, при этом приложение настроено так же, как и на сервере. Если я удалю проверку подлинности Windows из настроек IIS, ничего не изменится. Если я удалю атрибут авторизации из своего кода, ничего не изменится. Если я удалю оба, я смогу получить доступ ко всему как анонимный пользователь.

3. Действительно странно, что пул приложений отключается. Вы пробовали использовать другой пул приложений или что-то в этом роде? Также вы говорите, что на том же сервере есть другие приложения, на которых включена аутентификация Windows, и они не приводят к сбою процесса?

4. Да, это то, что я говорил. Поскольку это старое приложение находится «в производстве», я переместил новое приложение в другой (новый) пул приложений после первого сбоя, чтобы не допустить повторного сбоя производственного пула приложений. Это не исправило проблему. Я видел, что проблема исчезла час назад (не уверен, следует ли мне называть это «исправленным») после перезагрузки моего компьютера (он хотел установить Центр обновления Windows), затем очистить и перестроить в Visual Studio, а затем снова развернуть приложение… WTF !?

Ответ №1:

Убедитесь, что IIS_IUSRS (IIS 7.x) имеет доступ на чтение к папке приложения. Убедитесь, что идентификатор пула приложений, который вы используете, находится в группе IIS_IUSRS (например. IIS APPPOOL DefaultAppPool)