我有两个非常相似的 ASP Classic 应用程序,它们都使用 Windows 身份验证并在同一台开发 PC(Windows 7/IIS 7.5)上运行。
它们已经存在多年了,多年来随着我升级 PC 而“旅行”。一个工作正常,但另一个却不行——我不能肯定它是否曾经在这台特定的 PC 上工作过,因为我已经有一段时间没有使用它了,但我思考它最近一直在发挥作用。
我的问题是,当我浏览该网站时,出现以下错误:
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid
Cannot read configuration file due to insufficient permissions
奇怪的是,它声称没有足够的权限访问 web.config - 但没有 web.config!
在应用程序设置中,如果我们测试连接,则会报错:
Authorization: Application pool identity cannot access path
据我所知,这两个应用程序的配置相同:
- 两者都使用相同的应用程序池
- 池的身份(域用户)具有与应用程序文件夹相同的权限(读取 + 修改)
- 两者都配置为 Windows 身份验证
我被难住了!有什么想法吗?
编辑:完整错误信息:
**Detailed Error Information**
Module IIS Web Core
Notification BeginRequest
Handler Not yet determined
Error Code 0x80070005
Config Error Cannot read configuration file due to insufficient permissions
Config File \\?\D:\Projects\Scope2\web.config
Requested URL http://myserver:80/scope2/
Physical Path D:\Projects\Scope2\
Logon Method Not yet determined
Logon User Not yet determined
答案1
最佳的揣测:
应用程序池似乎无法读取目录或其子文件夹中的 web.config 文件。NTFS 权限可能阻止它执行此操作。
应用程序池作为应用程序池属性中配置的应用程序池标识启动。此帐户需要能够枚举网站内的所有文件夹,以读取其中的 web.config 文件。
IIS 7.x 将其配置存储在 web.config 文件中 - 如果任何子文件夹禁止访问应用程序池帐户,您将遇到困难。
我认为消息的第二部分表明当前应用程序池标识没有对其在那里命名的文件夹的读取权限。
例如,如果您授予所有人:读取它所指的文件夹的权限,如果错误再次出现,它可能会命名一个不同的文件夹。
您可以允许 IIS_IUSRS 读取您网站的所有文件夹,但这是一个相当广泛的解决方案;您真正需要做的是允许您的应用程序池帐户读取网站(和子文件夹)的全部内容。(并且只能读取(从不修改或写入),除非您是非常特殊情况(假设你不是)
或者,您可以在站点级别设置 allowSubdirConfig 属性,以防止在较低级别的子文件夹中搜索 web.config 文件: http://msdn.microsoft.com/en-us/library/ms689463.aspx