在IIS 7中运行MVC3应用程序时出现问题

Mik*_*ore 29 asp.net-mvc iis-7 asp.net-mvc-3

我在运行Windows 7 Home-64位的计算机上运行IIS7中的MVC 3项目时遇到问题.这就是我做的.

  1. 安装IIS 7.
  2. 访问服务器并获得IIS欢迎页面.
  3. 创建了一个名为d:\ MySite的目录,并将MVC应用程序复制到该目录中.(MVC应用程序只是在visual studio中创建新的MVC3项目时创建的标准应用程序.它只显示一个主页和一个帐户登录页面.它在Visual Studio开发服务器内运行良好,我也将其复制出来到我的托管网站,它工作正常)
  4. 启动IIS管理控制台.
  5. 停止了默认网站.
  6. 添加了一个名为"MySite"的新站点,其物理目录为"d:\ Mysite"
  7. 将名为MySite的应用程序池更改为使用.Net Framework 4.0,集成管道

当我在浏览器中访问该站点时,我得到了d:\ MySite目录中的文件列表.就好像IIS没有将d:\ MySite的内容识别为MVC应用程序一样.

我需要做些什么来解决这个问题?

根据要求,这是web.config:

    <?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->

<configuration>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
  </appSettings>

  <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.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.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.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Mik*_*ore 32

我也在"ServerFault"上发布了这个问题,并在这里解决了这个问题.

答案是:

由于IIS是在.NET 4之后安装的,因此您可能需要运行aspnet_regiis.exe工具来向IIS注册所有.NET 4内容.


Jan*_*Jan 9

我想补充一些细节:

在使用aspnet_regiis -i我注册ASP.NET 4后,我还必须使用更新Web应用程序aspnet_regiis -s W3SVC/1/ROOT/SampleApp1来解决问题.

该/1/在W3SVC/1/ROOT/SampleApp1你的web应用程序的实例.您可以通过查看列中的IIS管理器找到它ID.

该ROOT/SampleApp1在W3SVC/1/ROOT/SampleApp1为您的应用程序的路径.如果您想要更新所有网站,请执行此操作aspnet_regiis -s W3SVC/.

之后它对我来说很好.