ASP.NET 4.5 MVC 4不适用于Windows Server 2008 IIS 7

很明显,我错过了一些东西,我无法在IIS 7上的Windows Small Business Server 2008上部署简单的ASP.NET MVC 4,.NET 4.5应用程序。

.NET框架4.5安装。

我是否应该在应用程序的应用程序池基本设置上看到该版本(4.5)? 在这个时候,我只有2.0和4.0,因为4.5就像只添加在4.0框架之上的3.5,我猜这是正常的。

当我浏览主页时,出现以下错误:

403 - 禁止:访问被拒绝。 您无权使用您提供的凭据查看此目录或页面。

当我请求名为Page / page / index的唯一控制器时,我得到404找不到页面。 像ASP.NET过程一样,永远不会得到http请求。

我可以请求一个简单的HTML页面。

应用程序池设置为.NET 4.0,并作为托管管道模式集成。

NETWORK SERVICE具有对目录的读/写访问权限。

当然,该应用程序从VS2012完美无缺地工作。

我对这里不合适的东西毫无头绪,搜索引擎查询帮助不大。

有没有人会有提示,这将非常感激。 谢谢

编辑

这些DLL已经在System.Web.Mvc,System.Web.Razor等bin文件夹中。

我创建了一个空的test.aspx页面,以确保asp.net工作进程正在获取请求,并且该页面正常。 所以看起来,MVC路由不起作用,虽然我有ASP.NET MVC 3 Web应用程序在该服务器上正常工作。

.NET 4.5安装后,我做了一个aspnet_regiis -iru,以防应用程序添加了一个aspnet_client文件夹,但这仍不能解决问题。

匿名身份验证在IIS身份验证部分启用,授权显示允许所有用户使用。

ASP.NET MVC 4已经安装,我只是做了修复以确保。

尽管安装了ASP.NET MVC 4,但请求/ page / index操作的404错误是由标准IIS返回的,而不是标准的aspnet错误。 所以看起来像MVC 4框架没有正确安装,我只是仔细检查并修复。 我在哪里可以继续调查?

@Mystere Man,我已经将匿名身份验证更改为使用应用程序池标识,停止,启动应用程序并仍然出现相同的错误。 它看起来好像ASP.NET MVC 4没有接受请求。

这是web.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标记为接受的答案,因为它确实解决了问题。 但我当然不会在生产中使用它。 我问为什么我必须这样做,并没有任何答案。

比Martin Hollingsworth的回答真的是我正在寻找的,这是一个很好的方法来解决这个问题,而没有与runAllManagedModulesForAllRequests相关的所有性能问题。

我们几乎放弃了,并购买了一台新的Windows 2012服务器(ASP.NET MVC应用程序就像这样工作)。 在尝试Martin的解决方案之后,Windows 2008服务器正常运行。


如果您无法应用kb 980368中的QFE,而不是像接受的答案中所建议的那样使用runAllManagedModulesForAllRequests解决方案,则应该使用下面显示的preCondition =“”模块配置,以避免对静态内容产生负面影响,如博客文章asp.net MVC路由的工作原理及其对静态请求性能的影响,以及在获得MVC路由工作时不要使用runAllManagedModulesForAllRequests =“true”,以及一些关于答案的评论。

Scott Hanselman关于runAllManagedModulesForAllRequests的博客文章应该为这个论点增加一些权重。 Rick Strahl的帖子警告在IIS 7/8中runAllManagedModulesForAllRequests是我找到的设置之间交互的最佳解释。 模块preCondition属性上的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>

编辑:

上述解决方案适用于.NET 3.5或更低版本。 如果您使用的是.NET 4.0或更高版本,则可能需要尝试安装IIS7 QFE

此外,这篇文章值得阅读,以了解这两者之间的差异。


我有类似的问题。 我尝试了许多这里描述的解决方案(Web.Config system.webServer配置条目等),但都无济于事。 最后,我发现了我的特定安装问题。 我将我的网站发布到本地文件系统,然后将这些文件复制到服务器上。 事实证明,Global.asax文件不是发布文件的一部分。 一旦我复制了该文件,错误就消失了。

链接地址: http://www.djcxy.com/p/74347.html

上一篇: ASP.NET 4.5 MVC 4 not working on Windows Server 2008 IIS 7

下一篇: ASP.NET MVC 404 handling and IIS7 <httpErrors>