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服务器正常运行。
如果不能够应用QFE from kb 980368,而不是使用runAllManagedModulesForAllRequests溶液如在接受answer建议的,则应该使用模块的配置与前提=“”如下所示避免负如博客文章How asp.NET MVC Routing Works and its Impact on the Performance of Static Requests和Don't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work中所述的对静态内容的影响以及对答案的一些评论。
Scott Hanselman's blog post about runAllManagedModulesForAllRequests应该为这个论点增加一些权重。 Rick Strahl's后Caveats 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>
是的,这是解决问题的好方法,我们购买了一款运行良好的Win 2012,并且我尝试了您在2008年Win 2008上的解决方案,并按预期工作。现在我们甚至会保留2008服务器,现在它不需要runAllManageModulesForAllRequests就可以工作。 –
如果您的Windows 2008 Server使用IIS 7.0(不是R2),那么这是修补程序的下载链接:http://www.microsoft.com/en-us/download/details.aspx?id=11342 –
Brilliant !巨大的成功,非常好! – maxwellb
尝试使用此:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>
编辑:
在溶液上方将下面.NET 3.5或工作。 如果您正在使用或以上.NET 4.0中,你可能会想尝试installing IIS7 QFE
此外,this article是值得一读,了解这两个之间的区别。
检查EventViewer的应用程序日志是否有错误。 检查位置C:\ inetpub \ logs中的IIS日志以获取页面的请求。 接下来在这里分享这些信息,这样会更容易解决问题。 –
这个设置告诉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
祝你好运!
我也有类似的问题。我尝试了许多这里描述的解决方案(Web.Config system.webServer配置条目等),但都无济于事。最后,我发现了我的特定安装问题。我将我的网站发布到本地文件系统,然后将这些文件复制到服务器上。事实证明,Global.asax文件不是发布文件的一部分。一旦我复制了该文件,错误就消失了。
男人,你的回答值得+1000,认真!我花了半天的时间来“排除故障”,意识到我忘记部署'Global.asax'。 – uncoder
很高兴为您提供帮助! :) –
正如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试图处理,并反过来有同样的问题,但隐藏的基本问题.....
您是否可以再次确认App Pool正在NETWORK SERVICE帐户下运行? –
是应用程序池使用NetworkService帐户(来自内置下拉列表) –
您是否启用了匿名身份验证(或您计划使用的任何身份验证)? –