StructureMap не работает в IIS 7.5 с AppPoolIdentity - PullRequest
0 голосов
/ 30 марта 2011

У меня проблема с приложением ASP.NET MVC, размещенным на IIS 7.5 в отдельном пуле приложений, настроенном с помощью AppPoolIdentity и .NET 4.0 Framework.

Приложение работает некоторое время нормально, и часть контроллеров неожиданно начинает выдавать исключение внутри StructureMap:

System.ArgumentNullException: пробуем найти экземпляр типа [MyType] Имя параметра: instance

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

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

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

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

Проблема исчезает , когда я меняю AppPoolIdentity на «реальные» учетные данные пользователя локальной системы. Так что, похоже, проблема где-то между IIS и StructureMap Может быть, переработка пула приложений создает проблемы здесь? Но он настроен на перезапуск каждые 1740 минут, и иногда происходит сбой через 5 минут после его запуска ...

1 Ответ

0 голосов
/ 01 апреля 2011

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

Недостаток в GetNamedInstance<T> Метод контейнера StructureMap.Я запрашиваю именованный экземпляр, который не зарегистрирован, StructureMap пытается создать экземпляр и добавить его в контейнер.Создание не удалось, но, тем не менее, StructureMap регистрирует null в контейнере.Каждый последующий запрос для этого именованного экземпляра завершается неудачно при обнаружении этого null.

Наш обходной путь заключается в том, что мы используем GetAllInstances<T> вместо GetNamedInstance<T> и выполняем итерацию вручную через все экземпляры T, чтобы найти соответствующий.

...