ASP.NET 4.5 MVC 4 не работает на Windows Server 2008 IIS 7


очевидно, я что-то упускаю, я не могу развернуть простой ASP.NET MVC 4, .NET 4.5 приложение на Windows Small Business Server 2008 на IIS 7.

установлена платформа .NET framework 4.5.

должен ли я видеть эту версию (4.5) в основных настройках пула приложений приложения? В это время у меня есть только 2.0 и 4.0, так как 4.5 похож на 3.5, которые только добавляют поверх 4.0 framework, я думаю, это нормально.

когда я просматриваю дома страница, я получил следующую ошибку:

403 - запрещено: Доступ запрещен. У вас нет разрешения на просмотр этого каталога или страницы с использованием предоставленных учетных данных.

когда я запрашиваю единственный контроллер с именем Page/page / index, я получаю страницу 404 not found. Как то: ASP.NET процесс никогда не получает http-запрос.

Я могу запросить простую HTML-страницу.

пул приложений имеет значение .NET 4.0 и интегрирован как управляемый конвейер режим.

сетевая служба имеет доступ для чтения / записи в каталог.

приложение работает безупречно с VS2012, конечно.

Я не знаю, что здесь не так, и поисковые запросы не очень помогают.

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

Edit

библиотеки уже находятся в папке bin, как системы.Сеть.Mvc, System.Сеть.Бритва и т. д.

I создал пустой тест.aspx страница, чтобы убедиться asp.net рабочий процесс получал запрос, и да, страница была в порядке. Таким образом, похоже, что маршрутизация MVC не работает, хотя у меня есть ASP.NET веб-приложение MVC 3 отлично работает на этом сервере.

после установки .NET 4.5 я сделал aspnet_regiis-iru в случае, если он добавил папку aspnet_client в приложение, но все равно это не устраняет проблему.

анонимная проверка подлинности включена в разделе Проверка подлинности IIS, и Авторизация показать разрешить для всех пользователей.

ASP.NET MVC 4 установлен, я просто сделал ремонт, чтобы убедиться.

Eventhough the ASP.NET установлен MVC 4, ошибка 404 от запроса действия /page/index возвращается стандартным IIS, а не стандартной ошибкой aspnet. Так что действительно похоже, что фреймворк MVC 4 не установлен должным образом, я просто дважды проверяю и делаю ремонт. Где я могу продолжить расследование?

@Mystere человек, я изменил Анонимная проверка подлинности для использования удостоверения пула приложений, остановки, запуска приложения и все той же ошибки. Это действительно выглядит так, если ASP.NET MVC 4 не принимает запрос.

здесь является частью веб.config:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

изменить 2012/09/27

Я повторно сопрягаю Microsoft Framework .NET 4.5 и восстанавливаю ASP.NET MVC 4, повторно развернуть простой ASP.NET MVC 4 приложение, и я все еще получаю то же самое поведение. Я не уверен, что делать дальше, поэтому я начал щедрость в надежде что кто-то может помочь мне найти проблему.

изменить 2014/01/31

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

чем Мартин Холлингсворт ответ был действительно то, что я искал, хороший способ решить эту проблему без проблемы с производительностью, связанные с runAllManagedModulesForAllRequests.

мы почти сдались и купили новый сервер Windows 2012 (из которого ASP.NET приложение MVC работает как есть). После попытки решения Мартина, сервер Windows 2008 работал.

9 51

9 ответов:

Если вы не применять QFE от КБ 980368, вместо runAllManagedModulesForAllRequests решение как предложено в принятом ответ, вы должны использовать конфигурацию модулей с условие="" показано ниже, чтобы избежать негативного влияния на статический контент, как описано в блогах как asp.NET маршрутизация MVC работает и ее влияние на производительность статических запросов и не используйте runAllManagedModulesForAllRequests= "true" при получении маршрутизации MVC для работы и некоторые комментарии к ответам.

Скотта Хансельмана о runAllManagedModulesForAllRequests должны добавить некоторый вес к этому аргументу. Рик Штраль-х post предостережения с runAllManagedModulesForAllRequests в IIS 7/8 - это лучшее объяснение взаимодействия между настройками я не нашел. Этот Документация IIS на атрибут предварительного условия модуля также стоит прочитать.

помните, что это изменение конфигурации не требуется, если вы применили QFE, поскольку это поведение становится по умолчанию.

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

попробуйте использовать этот:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>

EDIT:

решение выше будет работать для .NET 3.5 или ниже. Если вы используете .NET 4.0 или выше, вы можете попробовать установка IIS7 QFE

и в этой статье стоит прочесть, чтобы понять разницу между этими двумя.

У меня была похожая проблема. Я пробовал многие из решений, описанных здесь (в Интернете.Система настроек.запись конфигурации веб-сервера и т. д.) безрезультатно. В самом конце, я обнаружил, что проблема была с моей конкретной установки. Я публиковал свой сайт в локальной файловой системе, а затем копировал эти файлы на сервер. Оказалось, что файл Global.asax не был частью опубликованных файлов. Как только я скопировал этот файл, ошибка ушла.

по состоянию на https://stackoverflow.com/a/12521807/695829

У меня была та же проблема, и это исправление исправило ее::http://support.microsoft.com/kb/980368

Как упоминалось SonicTheLichen, если вы публикуете из Visual studio, то gloabal.файл asax по умолчанию не копируется. Путем копирования глобального.asax для вашего веб-сервера должен решить эту проблему. Спасибо SonicTheLichen за доказательство решения.

с уважением, Саураб

Я не знаю, исправит ли это вашу проблему, но она исправила то, что у меня было развертывание и приложение MVC для IIS.

Мне пришлось добавить карту подстановочных приложений в aspnet_isapi.DLL для домашнего виртуального каталога/приложения. Вы можете сделать это, щелкнув правой кнопкой мыши на веб-сайте виртуальный каталог и выбрав вкладку домашний каталог/виртуальный каталог, нажав кнопку Настройка, а затем нажмите кнопку Вставить под сопоставлений раздел.

C:\WINDOWS\microsoft.net\Framework64\v4.0.30319\aspnet_isapi.dll

удачи!

У меня была похожая проблема. Мне пришлось развернуть сайт .net MVC на новый сервер с установленными Windows 2008 и IIS 7.5. Когда я проверил программы и функции, я увидел, что установлен только .Net Framework 4.5.1. Я вручную включил функцию .Net 3.5.1 Windows. После установки MVC 4.0 маршрутизация не работала.

мое решение:
1) деинсталлируйте .NET 4.5.1 framework и MVC 4.0
2) Установите .Net Framework 4.0
3) Установите .Net framework 4.5.1
4) Установите MVC 4.0

Я знаю, что это старый, но обновления windows только сейчас потратили пару часов для меня:

Если вы обрабатываете свои исключения в глобальном масштабе.asax это также может быть просто, как сохранение обновлений windows так же, как ваш dev env... Для меня это было не очевидно, это привело к тому, что "не удалось загрузить...."исключение, которое мое глобальное.асакс попытался справиться и, в свою очередь, имел ту же проблему, но скрывал основную проблему.....

Мне пришлось включить скрипты в разделе сопоставления обработчиков свойств веб-сайта в IIS.

Handler Mappings

откройте IIS, нажмите на соответствующий веб-сайт. Откройте "сопоставления обработчиков" и нажмите кнопку "Редактировать разрешения". Установите флажки для сценария и выполнить, а затем нажмите кнопку ОК. Хорошо идти!