Отображение * .MVC в aspnet_isapi.dll на IIS7 - PullRequest
2 голосов
/ 27 сентября 2011

У нас есть приложение .net 3.5 (смешанные MVC и WebForms), которое было размещено на IIS6.Чтобы заставить его работать на IIS6, нам пришлось добавить пользовательские сопоставления в IIS, чтобы * .MVC отображался в aspnet_isapi.dll.

Таким образом, наши URL-адреса выглядели бы так: <host>\someController.mvc\action

Но теперь, когда мы настраивали это веб-приложение на IIS7 с пулом в классическом режиме, пытались сделать то же самое, чтобы нам не пришлось ничего менять в приложении.

Но после добавлениясопоставление обработчика * .MVC в IIS7, по-видимому, все еще не подхватывает его.Каждый раз, когда мы переходим на наши страницы MVC, мы получаем 404 ошибки.Тем не менее, наши. ASPX-страницы загружаются нормально.

При ближайшем рассмотрении отслеживание невыполненных запросов продолжает жаловаться на следующее ModuleName="IIS Web Core", Notification="MAP_REQUEST_HANDLER", HttpStatus="404", HttpReason="Not Found", HttpSubStatus="0", ErrorCode="The system cannot find the file specified. (0x80070002)", ConfigExceptionInfo=""

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

1 Ответ

3 голосов
/ 24 февраля 2012

Я только что имел дело с этим, и что для меня действительно было - избавиться от всего MvcHttpHandler (удалите его из тега конфигурации

<system.webServer>/<handlers>

).

MSDN заявляет, что этот обработчик полезен только тогда, когда UrlRoutingModule не включен для всех запросов (что в IIS7 + мы можем), поэтому он полезен для IIS6 (а также почему нам нужно расширение * .mvc для правильной маршрутизации).

Так что просто удалите ссылку MvcHttpHandler в ваших обработчиках и убедитесь, что вы:

  • Запустите приложение в пуле приложений со встроенным режимом (не Classic)
  • У вас есть атрибут модуля runAllManagedModulesForAllRequests, установленный в "true"

    <modules runAllManagedModulesForAllRequests="true">
    

Если вы все еще получаете 404, то это либо ваш MVC делает это (что действительно отвлекло меня: S) другая причина.

...