我显然缺少了什么,我无法在安装了.NET 4.5的Windows Small Business Server 2008上的IIS 7上部署一个简单的ASP.NET MVC 4应用程序。
应用程序池基本设置中只有2.0和4.0版本,而没有4.5版本。因为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已经在bin文件夹中,例如System.Web.Mvc,System.Web.Razor等。
我创建了一个空的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>
编辑于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应用程序就可以正常工作)。但尝试了马丁的解决方案后,Windows 2008服务器也可以正常工作了。