Назад | Перейти на главную страницу

Приложение, размещенное в IIS 7.5, выдает сбой через некоторое время при запуске в AppPoolIdentity

У меня проблема с IIS 7.5 в конфигурации Windows Server 2008. Я размещаю приложение ASP.NET MVC в отдельном пуле приложений, настроен с помощью AppPoolIdentity и .NET 4.0 Framework.

Приложение некоторое время (несколько минут) работает нормально, после чего у меня внезапно возникают исключения, которые выглядят как связанные с управлением ресурсами IIS. В проблема исчезает, когда я меняю AppPoolIdentity на "настоящего" пользователя локальной системы учетные данные (локальный администратор). Может быть, переработка пула приложений создает здесь проблемы? Но он настроен на повторное использование каждые 1740 минут и иногда выходит из строя через 5 минут после запуска ...

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

Детали проблемы с точки зрения приложения

Приложение какое-то время работает нормально, и внезапно часть контроллеров начинает генерировать исключение внутри StructureMap:

ArgumentNullException: Пытаюсь найти экземпляр типа [MyType] Имя параметра: instance

в StructureMap.InstanceCache.Get(Type pluginType, Instance instance) +376

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

NullReferenceException: В экземпляре объекта не задана ссылка на объект. в StructureMap.Diagnostics.WhatDoIHaveWriter.writeInstance(InstanceRef instance) +133

Похоже, что внутренний кеш StructureMap каким-то образом поврежден.

В IIS приложение работает в пуле приложений. Пул приложений работает в одном или нескольких процессах W3WP.

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

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

Все удостоверения пула приложений волшебным образом получают членство в IIS_IUSRS по умолчанию, которое предоставляет все разрешения, необходимые IIS для запуска пула приложений - это может не включать все разрешения, необходимые для вашего конкретного приложения / платформы / одной из библиотек.

Пытаться включение параметра загрузки профиля пользователя в пуле приложений при запуске с низким уровнем привилегий, и если это не улучшит ситуацию, вам необходимо отладить его - либо посмотрите, как он работает с помощью Process Monitor, на предмет возможных трудностей с доступом к файлам или реестру (http://live.sysinternals.com/procmon.exe), или возьмите дамп памяти процесса, когда он потерпел неудачу, возьмите PSSCOR2 и, возможно, начните с! dae, если в этот момент ничего не выглядит особенно странным.

Коротко говоря, внутреннее состояние процесса / времени выполнения звучит так, как будто оно запускается; не должно; часто это будет какая-то проблема с собственным кодом, но в вашем случае это могут быть разрешения.

Изменить: О, не LocalSystem, {локальная система пользователь как администратор}. Попался. Что ж, попробуйте функцию Profile - см. Также этот бит.

Кроме того, переработка: когда новый W3WP запускается для замены старого, теряется все состояние старого в процессе, а старый удаляется через 90 секунд, если он не выполняет какую-либо полезную работу, он все еще способен из, и выключился. (читать "по умолчанию")