Подтвердить что ты не робот

Получение приложения ASP.MVC2/VS2010 для работы в IIS 7.5

Недавно я загрузил бета-версию 2 VS2010 и начал играть с ASP.NET MVC2. Первоначальная разработка была выполнена с Casini, но теперь я хотел запустить приложение из IIS 7.5 (у меня работает Windows 7). Я установил совместимость с метабазой IIS6, и я запускаю VS2010 в качестве администратора, поэтому я могу использовать кнопку "Создать виртуальный каталог" на вкладке "Веб" в настройках проекта. Это создало запись веб-приложения в IIS, но она не работает.

Когда я перехожу на главную страницу (http://localhost/MyMvcApp/), я получаю ошибку HTTP 403. Когда я перехожу непосредственно на одну из подстраниц (http://localhost/MyMvcApp/Home/), я получаю HTTP 404.

Итак, по какой-то причине URL-маршрутизация не работает. Я уже добавил UrlRouting в качестве модуля и обработчика web.config. В моих поисках это предлагается как решение для некоторых проблем с similair. Но для меня это все еще не работает.

Интересная часть моего web.config выглядит так:

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <assemblies>
      <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>
  <authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" />
  </authentication>
  <membership>
    <providers>
      <clear />
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
    </providers>
  </membership>
  <profile>
    <providers>
      <clear />
      <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
    </providers>
  </profile>
  <roleManager enabled="false">
    <providers>
      <clear />
      <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
    </providers>
  </roleManager>
  <pages>
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
    </namespaces>
  </pages>
  <httpHandlers>
    <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler" />
  </httpHandlers>
  <customErrors mode="Off" />
</system.web>
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" >
    <remove name="UrlRoutingModule"/>
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </modules>
  <handlers>
    <remove name="MvcHttpHandler" />
    <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler" />
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </handlers>
  <httpErrors errorMode="Detailed" />
</system.webServer>
4b9b3361

Ответ 1

После проверки и проверки я заметил, что в диалоговом окне "Включить или отключить Windows" диалоговое окно "Ошибки HTTP" и "Перенаправление HTTP" отсутствовали. Это странно, поскольку, насколько я помню, это было установлено автоматически установщиком Microsoft Web Platform. В любом случае "HTTP Redirection" показалось, что при работе с MVC функция "необходимость иметь". Поэтому после того, как я установил его, все показалось, что все работает отлично.

Ответ 2

У меня была эта проблема, и, к сожалению, исправление здесь не срабатывало для меня.

Что работала над этим:

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir

в командном окне... теперь работает как сон!

(Итак, ASP.Net не установлен в IIS по умолчанию при установке VS2010?)

Ответ 3

Добавьте это в свой web.config файл:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>

Ответ 4

Это такая боль делает это вручную. Но определенно выполнимо! Я справился с этим и подвел итог в этом пошаговом руководстве по добавление проекта mvc 2 в решение exisitng web forms здесь. Надеюсь, это поможет... мне потребовались годы для работы, несмотря на все настройки конфигурации, и, похоже, ресурсов было мало.

Ответ 5

Что мне помогло, так это использование классического конвейера для AppPool вместо интегрированного: alt text

Ответ 6

Обратите внимание, что вы должны запустить aspnet_regiis.exe -ir как администратор, это кажется очевидным, но когда вы устали от попыток безрезультатно решить эту проблему, вы можете передать ее.

Просто, чтобы сказать большое СПАСИБО всем ответам, после многих часов, пытаясь разузнать, наконец, я смог получить работу с моим приложением MVC 2 в IIS.

Ответ 7

Я создавал приложение MVC2 на своем ноутбуке Windows 7, используя .net beta 2 и VS 2010 beta 2. Когда я установил всю среду разработки на Windows Server 2008, включая VS, построил решение и запустил его, маршрутизация работала нормально.

Следующим шагом было создание производственного сервера на Windows Server 2008, на котором я развернул бета-версию .net 4.0, но ни один из других материалов, которые поставлялись с бета-загрузкой VS 2010. В этой конфигурации маршрутизация никогда не работала, пока я не включу HTTP-перенаправление, как указано Jeroen.

Надеюсь, это поможет кому-то, кто может быть в одной лодке.

Ответ 8

Просто хотел заметить, что у меня была такая же проблема с 403 и 404, но добавив system.webServer, и все элементы из system.web/pages/namespaces node разрешили это для меня.