Приложение ASP.NET MVC при развертывании в IIS 7 в интегрированном режиме с использованием данных NHibernate не загружается - PullRequest
1 голос
/ 16 января 2010

Мы создали приложение ASP.NET MVC, которое использует NHibernate , MVCContrib версию StructureMap и луковую архитектуру как изложено Джеффри Палермо в ASP.NET MVC в действии . Это приложение хорошо работает при локальном запуске из Visual Studio 2008.

Действие Index на нашем контроллере Home загружает представление, которое немедленно извлекает данные из базы данных, используя инструменты, как описано выше. При работе на IIS 6 или в классическом режиме на IIS 7 этот раздел страницы загружает данные. Конечно, в обоих этих режимах 404 File Not Found ошибок предостаточно. К сожалению, при работе в интегрированном режиме IIS 7 данные не загружаются и появляется простое сообщение об ошибке Извините, при обработке вашего запроса произошла ошибка , где данные должны быть отображены. Другие элементы страницы, такие как CSS и изображения загружаются. Есть ли настройка IIS 7, которую мы пропустили? Что я должен искать в файле web.config?

Редактировать

Изменен параметр customErrors mode в файле web.config на off. Не уверен, что это ASP.NET MVC или IIS 7, но теперь я вижу стандартный экран ошибок на страницах, на которых отображалось сообщение об ошибке. Я получаю необработанное исключение NullReferenceException : ссылка на объект не установлена ​​для экземпляра объекта. При просмотре стека это происходит при попытке получить данные. Какая разница между IIS 7 Classic Mode / IIS 6 и IIS 7 Integrated, которая может вызвать эту проблему?

Редактировать 2

После некоторого поиска в Google этим утром натолкнулся на сообщение MVC + Sharp + IIS7 + NHibernate , которое, похоже, решило бы проблему. Пост с июня '09 изменил что-то с тех пор, что мне не нужно возвращаться в классический режим?

1 Ответ

3 голосов
/ 18 января 2010

Подумав о том, что происходит, и осознав, что эта проблема, вероятно, как-то связана с NHibernate, я уточнил некоторые из моих поисков в Google и обнаружил сообщение HttpModule и HttpHandler в файлах IIS 7 web.config . Это напомнило мне, что NHibernate требует записи httpModules.

<system.web>
  <httpModules>
    <add name="StartupModule" type="Infrastructure.NHibernateModule,
         Infrastructure, Version=1.0.0.0, Culture=neutral"/>
  </httpModules>
</system.web>

Из-за того, что IIS 7 в интегрированном режиме работает, мне пришлось добавить следующее в modules раздел system.webServer.

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="StartupModule" type="Infrastructure.NHibernateModule,
         Infrastructure, Version=1.0.0.0, Culture=neutral" />
  </modules>
</system.webServer>

Поскольку мне нужно, чтобы оба модуля работали как в system.web, так и в system.webServer, я добавил раздел validation в system.webServer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...