Получение приложения 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. В моих поисках это предлагается как решение некоторых подобных проблем. Но для меня это все еще не работает.

Интересная часть моего 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>

8 ответов

Решение

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

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

Что работало, работало так:

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

в командном окне... работает как сон сейчас!

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

Добавьте это к вашему web.config файл:

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

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

Что мне помогло, так это использование классического конвейера для AppPool вместо интегрированного: http://img823.imageshack.us/img823/3684/20100612135212.png

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

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

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

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

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

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

Другие вопросы по тегам