我在IIS7和VS Web开发服务器上都运行了一个ASP.NET MVC 2应用程序。我最近在网站上添加了区域,这些在IIS7和VS Web开发服务器上也能正常工作。
但是,当我将此站点部署到运行win2k3的IIS6测试服务器时,这些区域将不再起作用。使用网站其余部分的默认路由的所有路径都可以正常工作(例如./ Home / Index /),但是当我导航到某个区域时(例如/ Admin / Users / Index /),我得到一个HttpException:< / p>
System.Web.HttpException:服务器无法访问应用程序目录 'C:\ INETPUB \ MobileWeb \管理\'。目录没有 由于安全设置而存在或无法访问。
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部署项目发布到测试服务器(并手动复制文件) - 两者都有相同的问题。
答案 0 :(得分:0)
似乎是该文件夹的目录级权限。我假设“Everyone”组具有对该目录的读访问权。是否有某些帐户被拒绝访问该目录?
答案 1 :(得分:0)
你不太可能遇到和我一样的问题,但如果你在这里做了我的解决方案:
我添加了一个新的“管理员”区域,每当我去新区域的任何页面时都会收到此错误,但所有其他区域都正常工作。
这个新区域取代了旧的Web表单应用程序,该应用程序托管在IIS主应用程序下的虚拟站点上。虚拟站点的根目录是site.com/admin /.
旧的应用程序文件已从文件系统中删除,但IIS站点仍处于活动状态。每当一个请求进入/ admin / ...时,它都是由旧的应用程序处理的,它正确地找不到应用程序根,所以它引发了异常。