【问题标题】:ASP.NET MVC2 Areas not working in IIS6ASP.NET MVC2 区域在 IIS6 中不起作用
【发布时间】:2011-11-30 04:52:45
【问题描述】:

我有一个 ASP.NET MVC 2 应用程序在 IIS7 和 VS Web 开发服务器上运行良好。我最近向站点添加了区域,这些区域在 IIS7 和 VS Web 开发服务器上也可以正常工作。

但是,当我将此站点部署到运行 win2k3 的 IIS6 测试服务器时,这些区域不再起作用。使用站点其余部分的默认路由的所有路径都可以正常工作(例如/Home/Index/),但是当我导航到一个区域(例如/Admin/Users/Index/)时,我得到一个HttpException:

System.Web.HttpException:服务器无法访问应用程序目录 'C:\InetPub\MobileWeb\Admin\'。目录没有 由于安全设置而存在或不可访问。

C:\InetPub\MobileWeb\ 是我网站的根目录。如果我将 Admin 目录添加到文件系统,我会收到各种程序集加载错误,但我很确定如果我能让这些区域正常工作,这不会发生。

为了在 IIS6 上启用 ASP.NET MVC,我所做的(并且之前做过很多次)就是添加一个映射到 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 的通配符处理程序,并取消选中“验证该文件是否存在”

我们的构建服务器通过编译 VS 2008 部署项目自动部署此代码,然后将输出复制到我们的测试服务器。我发现 this article 有类似的问题,但如果我正确理解了分辨率,它对我不起作用。

在 IIS6 上我需要做一些独特的事情吗?

更新 - 这是完整的堆栈跟踪:

[HttpException (0x80004005): Server cannot access application directory 'C:\InetPub\MobileWeb\'. The directory does not exist or is not accessible because of security settings.]
   System.Web.HttpRuntime.EnsureAccessToApplicationDirectory() +8932031
   System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags) +87

[HttpException (0x80004005): Server cannot access application directory 'C:\InetPub\MobileWeb\'. The directory does not exist or is not accessible because of security settings.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8894095
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +85
   System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +259

更新 我尝试使用 VS2008 发布网站和 VS2008 Web 部署项目(并手动复制文件)发布到测试服务器 - 两者都有相同的问题。

【问题讨论】:

  • 即使非区域路由比默认路由更复杂,它也能正常工作吗?例如。 /iis6/die/already/666?
  • 路由调试有什么发现?它“找到”路线了吗?
  • @bzlm - 我真的没有比标准 /controller/action/id?url_params=stuff 更复杂的路线,而且它们都可以工作
  • @NickDeVore 路由调试不适用于区域路由,我得到与上面相同的“服务器无法访问应用程序目录”错误 - 它甚至没有执行路由调试代码
  • 我知道你没有这样的路线。我认为您应该制作它们,以帮助查明问题。 :)

标签: asp.net-mvc-2 iis-6 web-deployment-project asp.net-mvc-areas


【解决方案1】:

似乎是该文件夹的目录级权限。我假设“每个人”组对该目录具有读取权限。是否有某个帐户被拒绝访问该目录?

【讨论】:

  • c:\InetPub\MobileWeb 如果 IIS 进程无法访问它,那么您可能会遇到这种错误
  • 但是为什么他在新目录中得到编译器错误?有什么不对劲。权限并不是那么牵强,特别是考虑到它是有问题的新目录。
  • 根据问题没有“新目录”,只是最近部署到IIS 6的Web应用程序。
  • 我是根据错误消息来判断的。它说它无法访问该文件夹。如果我的回答有误,请发表您的建议。
  • @Nick DeVore - 这是问题的根源。没有 Admin 文件夹,也不应该有 - 它只是 MVC 应该用来找出可以找到控制器和操作的 MVC 区域的路径的一部分。
【解决方案2】:

您不太可能遇到与我相同的问题,但万一您遇到了,这是我的解决方案:

我添加了一个新的“管理”区域,每当我进入新区域中的任何页面时都会收到此错误,但是所有其他区域都工作正常。

这个新区域取代了旧的 Web 表单应用程序,该应用程序托管在 IIS 主应用程序下方的虚拟站点上。虚拟站点的根目录是 site.com/admin/。

旧的应用程序文件已从文件系统中删除,但 IIS 站点仍处于活动状态。每当对 /admin/... 发出请求时,它都会由旧应用程序处理,该应用程序(正确地)找不到应用程序根目录,因此它引发了异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2018-04-29
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多