Получение приложения ASP.MVC2 / VS2010 для работы в IIS 7.5 - PullRequest
26 голосов
/ 05 декабря 2009

Я недавно скачал бета 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 ]

49 голосов
/ 26 мая 2010

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

Что работало, запустил это:

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

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

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

26 голосов
/ 07 декабря 2009

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

5 голосов
/ 09 декабря 2012

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

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!-- rest of config -->
</system.webServer>
2 голосов
/ 27 мая 2010

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

1 голос
/ 22 марта 2011

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

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

1 голос
/ 12 июня 2010

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

0 голосов
/ 21 июня 2010

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

0 голосов
/ 16 февраля 2010

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

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

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

...