显然我遗漏了一些东西,我无法在 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就像3.5一样,只是在4.0框架之上添加的,我想这是正常的。
当我浏览主页时,出现以下错误:
403 - 禁止:访问被拒绝。您无权使用您提供的凭据查看此目录或页面。
当我请求唯一一个名为 Page /page/index 的控制器时,我得到了 404 not found 页面。就像 ASP.NET 进程永远不会得到 http 请求。
我可以请求一个简单的 HTML 页面。
应用程序池设置为 .NET 4.0 并集成为托管管道模式。
NETWORK SERVICE 对目录具有读/写权限。
当然,该应用程序从 VS2012 完美运行。
我对这里不正确的地方一无所知,搜索引擎查询也没有多大帮助。
有没有人有提示,那将非常感激。谢谢
编辑
dll 已经在 bin 文件夹中,例如 System.Web.Mvc、System.Web.Razor 等。
我创建了一个空的 test.aspx 页面,以确保 asp.net 工作进程正在获取请求,是的,页面正常。因此,尽管我的 ASP.NET MVC 3 Web 应用程序在该服务器上运行良好,但 MVC 路由似乎无法正常工作。
.NET 4.5 安装后,我做了一个 aspnet_regiis -iru 以防万一,在应用程序上添加了一个 aspnet_client 文件夹,但这仍然不能解决问题。
匿名身份验证在 IIS 身份验证部分启用,并且授权显示允许所有用户。
ASP.NET MVC 4 已安装,我刚刚进行了修复以确保。
即使安装了 ASP.NET MVC 4,标准 IIS 会返回来自请求 /page/index 操作的 404 错误,而不是标准的 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 应用程序在该服务器上按原样工作)。在尝试了 Martin 的解决方案后,Windows 2008 服务器工作了。