У меня проблема с 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 секунд, если он не выполняет какую-либо полезную работу, он все еще способен из, и выключился. (читать "по умолчанию")