ASP.NET 4.5 MVC 4不能在Windows Server 2008 IIS 7上工作

问题描述:

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

安装.NET Framework 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人,我已经改变了匿名身份验证使用应用程序池身份,停止,启动应用程序,仍然是相同的错误。它看起来好像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> 

编辑2012年9月27日

我已经修复Microsoft .NET框架4.5和修复ASP.NET MVC 4 ,重新部署简单的ASP.NET MVC 4应用程序,我仍然会得到相同的行为。我不知道接下来该做什么,所以我开始了一笔赏金,希望有人能帮我找到问题。

编辑2014年1月31日

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

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

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

+0

您是否可以再次确认App Pool正在NETWORK SERVICE帐户下运行? –

+0

是应用程序池使用NetworkService帐户(来自内置下拉列表) –

+0

您是否启用了匿名身份验证(或您计划使用的任何身份验证)? –

如果能够应用QFE from kb 980368,而不是使用runAllManagedModulesForAllRequests溶液如在接受answer建议的,则应该使用模块的配置与前提=“”如下所示避免负如博客文章How asp.NET MVC Routing Works and its Impact on the Performance of Static RequestsDon't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work中所述的对静态内容的影响以及对答案的一些评论。

Scott Hanselman's blog post about runAllManagedModulesForAllRequests应该为这个论点增加一些权重。 Rick Strahl'sCaveats with the runAllManagedModulesForAllRequests in IIS 7/8是我找到的设置之间的交互的最佳解释。关于module preCondition attribute的IIS文档也值得一读。

如果您已应用QFE,则此行为将成为默认值,请记住此配置更改不是必需的。

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 
+0

是的,这是解决问题的好方法,我们购买了一款运行良好的Win 2012,并且我尝试了您在2008年Win 2008上的解决方案,并按预期工作。现在我们甚至会保留2008服务器,现在它不需要runAllManageModulesForAllRequests就可以工作。 –

+0

如果您的Windows 2008 Server使用IIS 7.0(不是R2),那么这是修补程序的下载链接:http://www.microsoft.com/en-us/download/details.aspx?id=11342 –

+0

Brilliant !巨大的成功,非常好! – maxwellb

尝试使用此:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    ... 
</system.webServer> 

编辑:

在溶液上方将下面.NET 3.5或工作。 如果您正在使用或以上.NET 4.0中,你可能会想尝试installing IIS7 QFE

此外,this article是值得一读,了解这两个之间的区别。

+0

检查EventViewer的应用程序日志是否有错误。 检查位置C:\ inetpub \ logs中的IIS日志以获取页面的请求。 接下来在这里分享这些信息,这样会更容易解决问题。 –

+0

这样可以解决问题,但为什么开箱即用的web.config没有按原样工作。即为什么我不得不添加此属性,并且是否存在任何启用此属性的性能问题?谢谢 –

+4

这个设置告诉IIS针对任何请求运行托管模块,即使对于静态请求(例如:images,.css,.js,...),也会影响这些请求的性能。 您可能想阅读[这篇文章的更多信息](http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-无扩展名的URL,而不会影响性,静态requests.aspx)。本文的作者还提供了另一个可能想要尝试的解决方案:[安装IIS7 QFE](http://support.microsoft.com/kb/980368)。 – kdrvn

我不知道这是否会解决您的问题,但它解决了我有部署和MVC应用程序到IIS。

我不得不将通配符应用程序映射添加到应用程序的home/virtual目录的aspnet_isapi.dll。您可以通过右键单击网站/虚拟目录并选择主目录/虚拟目录选项卡,单击配置按钮,然后单击通配符应用程序映射部分下的插入按钮来完成此操作。

C:\ WINDOWS \ microsoft.net \ Framework64 \ v4.0.30319 \ ASPNET_ISAPI.DLL

祝你好运!

https://*.com/a/12521807/695829

我有同样的问题,此修复程序固定它:http://support.microsoft.com/kb/980368

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

+4

男人,你的回答值得+1000,认真!我花了半天的时间来“排除故障”,意识到我忘记部署'Global.asax'。 – uncoder

+0

很高兴为您提供帮助! :) –

正如SonicTheLichen提到的,如果你是从视觉工作室发布的gloabal.asax文件默认情况下不被复制。通过将global.asax复制到您的网络服务器应该可以解决问题。谢谢SonicTheLichen提供解决方案。

问候, SAURABH

我也有类似的问题。我必须将.net MVC站点部署到安装了Windows 2008和IIS 7.5的新服务器。当我检查程序和功能时,我看到只安装了.Net Framework 4.5.1。我手动启用.Net 3.5.1 Windows功能。在我安装MVC 4.0之后,路由不起作用。

我的解决办法:
1)卸载。净4.5.1框架和MVC 4.0
2)安装.NET Framework 4.0
3)安装.NET Framework 4.5.1
4)安装MVC 4.0

我知道这是旧的,但Windows更新刚才浪费了几个小时对我来说:

如果您处理的异常在Global.asax中这也可以是简单的保持Windows更新与您的开发env ...对我来说,我并不明显,这个结果在一个“无法加载....”的例外,这是我的global.asax试图处理,并反过来有同样的问题,但隐藏的基本问题.....

我必须启用脚本IIS中网站属性的处理程序映射部分。

Handler Mappings

打开IIS,请在相关网站上。打开处理程序映射并单击“编辑功能权限”。选中脚本和执行框,然后单击确定。很好去!