ASP.NET4.5MVC 4不在WindowsServer 2008 IIS 7上工作怎么解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

很显然,我错过了一些东西,我无法在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 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.

当我请求名为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.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_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>

我重新配对了Microsoft Framework .NET 4.5并修复了ASP.NET MVC 4,重新部署了简单的ASP.NET MVC 4应用程序,并且我仍然得到相同的行为。

当我问这个问题时,我将runAllManagedModulesForAllRequests标记为接受的答案,因为它确实解决了问题。但我当然不会在生产中使用它。我问为什么我必须这样做,并没有任何答案。

我们几乎放弃了,并购买了一台新的Windows 2012服务器(ASP.NET MVC应用程序就像这样工作)。

提问于
用户回答回答于

如果无法应用kb 980368中QFE,应该使用下面显示的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

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

扫码关注云+社区