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,并作为托pipepipe道模式集成。

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

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

我对这里不合适的东西毫无头绪,而search引擎查询没有什么帮助。

有没有人会有一个提示,这将是非常感激的。 谢谢

编辑

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

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

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

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

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

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

@Mystere人,我已经改变了匿名身份validation使用应用程序池的身份,停止,启动应用程序,仍然是相同的错误。 看起来好像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/09/27

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

编辑2014/01/31

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

比马丁霍林斯沃斯答案是真正的我正在寻找,一个很好的方法来解决这个问题没有所有与runAllManagedModulesForAllRequests相关的性能问题。

我们几乎放弃了,并购买了一个新的Windows 2012服务器(从中ASP.NET MVC应用程序的工作原理)。 尝试Martin的解决scheme后,Windows 2008服务器工作。

如果您无法 从kb 980368应用QFE ,而不是按照接受的答案中的build议使用runAllManagedModulesForAllRequests解决scheme,则应使用下面显示的preCondition =“”模块configuration,以避免对静态内容的负面影响,如该博客文章如何asp.net MVC路由工作及其对静态请求的性能的影响 , 不要使用runAllManagedModulesForAllRequests =“true”,当您的MVC路由工作和一些评论的答案。

Scott Hanselman关于runAllManagedModulesForAllRequests的博客文章应该为这个论点增加一些权重。 Rick Strahl的post警告说IIS 7/8中的runAllManagedModulesForAllRequests是我find的设置之间交互的最好解释。 模块preCondition属性上的IIS文档也值得一读。

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

 <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> 

编辑:

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

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

我有一个类似的问题。 我尝试了许多这里描述的解决scheme(Web.Config system.webServerconfiguration条目等),无济于事。 最后,我发现了我的特殊安装问题。 我正在将我的网站发布到本地文件系统,然后将这些文件复制到服务器上。 原来Global.asax文件并不是发布文件的一部分。 一旦我复制了该文件,错误消失了。

按照https://stackoverflow.com/a/12521807/695829

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

正如SonicTheLichen所述,如果您从Visual Studio发布,则默认情况下不会复制gloabal.asax文件。 通过复制global.asax到您的networking服务器应该解决这个问题。 感谢SonicTheLichen提供的解决scheme。

问候,Saurabh

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

我必须添加通配符应用程序映射到应用程序的home / virtual目录的aspnet_isapi.dll。 您可以通过右键单击网站/虚拟目录并select主目录/虚拟目录选项卡,单击configurationbutton,然后单击通配符应用程序映射部分下的插入button。

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

祝你好运!

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

我的解决scheme
1)卸载.NET 4.5.1框架和MVC 4.0
2)安装.Net Framework 4.0
3)安装.Net框架4.5.1
4)安装MVC 4.0

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

如果你在Global.asax中处理你的exception,这也可以很简单,因为保持Windows更新相同的开发环境…对我来说,我并不明显,这导致了“无法加载….”exception,我的global.asax试图处理,反过来也有同样的问题,但隐藏的基本问题…..

我必须在IIS的网站属性的Handler Mapping部分中启用脚本。

处理程序映射

打开IIS,点击有问题的网站。 打开处理程序映射,然后单击“编辑function权限”。 选中脚本和执行框,然后单击确定。 很好去!