【问题标题】:Why is my file supposedly unable to be read due to insufficient permissions (HTTP Error 500.19), when it has no restrictions on it?为什么我的文件在没有任何限制的情况下,由于权限不足(HTTP 错误 500.19)而无法读取?
【发布时间】:2017-07-15 23:49:15
【问题描述】:

当我尝试运行 ASP.NET 站点时出现此错误(我第一次尝试运行它):

但查看涉及的文件(\C:\EnhancedSalesReporting\customerreportingnet\customerreportingnet\web.config),它似乎没有任何限制/权限不足:

这里真正的问题是什么,或者我必须做什么才能摆脱这个令人沮丧的障碍?

asp.net web.config 500.19 internalservererror configfile enoughpermissions 权限

更新

当我通过在 IIS 中创建一个虚拟目录,将其指向这些文件的位置,然后在 VS 中选择“文件”>“打开网站...”以不同的方式处理它时,我的表现并没有更好,真的。错误页面是不同的,但无论哪种方式我都被卡住了。该障碍被描述为here

更新 2

当我尝试按照the link provided in the comment by Ken White 中接受的答案中的步骤操作时,通过尝试将“IIS_IUSRS”添加到 Web.Config 的组或“安全”选项卡中的用户名,我得到“Name Not Found - An找不到名为“IIS_IUSRS”的对象...

我是不是走错了路?无论我尝试通过 Windows 资源管理器还是从 IIS7.5 中的“内容视图”窗格编辑 Web.Config,我都会得到相同的结果 - 还有其他含义吗?

更新 3

上面引用的帖子的另一个提示是,“您还应该检查 applicationhost.config 文件中的只读属性

这值得一试,但哪个?我的硬盘上有 9 个 applicationhost.config 文件,其中四个看起来很有可能,它们位于以下位置:

C:\Program Files (x86)\IIS Express
C:\Program Files\IIS Express
C:\Users\cshannon\MyDocuments\IIS Express
C:\Windows\System32\inetsrv

如果有的话,将 readonly 设置为 false 有什么好处?

更新 4

这是对 Michael Liu 的回答:

谢谢,迈克尔;

我按照您的步骤操作,但仍然得到相同的错误页面。我原以为它会起作用,所以我有点惊讶(甚至感到羞愧)我最终得到了相同的旧错误页面。

顺便说一句,我在任务管理器中没有看到“详细信息”选项卡,但“进程”选项卡中有“显示所有用户的进程”。

也许这就是问题所在 - 任务管理器中有 三个 w3wp.exe 条目:

Image Name      User Name
----------      ---------
w3wp.exe *32    DefaultAppPool
w3wp.exe        classicEservice 
w3wp.exe        NETWORK SERVICE

应该只有一个吗?

更新 5

重新启动 IIS7.5 后,我在任务管理器中“只有”两个 w3wp.exe 条目:

w3wp.exe *32 (DefaultAppPool)
w3wp.exe (NETWORK SERVICE)

那么 2 是不是太多了?

更新 6

回应迈克尔的更新步骤:

Application Pool == classicEservice

在“应用程序池”中,classicEservice 的值是:

Status == Started
.NET Framework Version == v2.0
Managed Pipeline Mode == Classic
Identity == ApplicationPoolIdentity
Applications == 5

再次执行这些步骤,但将“DefaultAppPool”替换为“classicEservice”肯定会让我走上正轨,因为我不再得到 500.19 错误页面。现在是http://localhost/CustomerReportingNET/pages/custmaint_entry.aspx 上的“沙漏”。

我认为也许应该去掉“/pages/custmaint_entry.aspx”;我会看看我需要做些什么来完成它......

更新 7

第一次“沙漏”直到奶牛回家,第二次(和第三次)它向我展示了这个:

更新 8

我尝试了“不调试就开始”,并去掉了 URL 的后端,使其只是“http://localhost/CustomerReportingNET/”,但它仍然是沙漏(或者我猜是“蓝色旋转甜甜圈”),就像一个过量服用的旋转苦行僧关于能量饮料。

【问题讨论】:

  • 错误页面底部引用的“事件日志”在哪里?
  • 添加/编辑用户权限时,在“来自此位置”部分 - proactusa.local 是您的 本地计算机(名称)还是某个网络域?您只影响您的本地计算机,因此用户来源应该相同(本地用户,而不是域)。
  • 看起来“权限不足”的问题已经解决。加载问题可能是一个单独的问题。为了解决它,我会尝试运行进程监视器并在您浏览到该站点时查看文件和注册表活动,看看它可能卡在哪里。例如,是否正在加载 .NET Framework DLL? ASP.NET 是否正在编译您的 .aspx 页面? DLL 是否被复制到 Temporary ASP.NET Files 文件夹并从那里加载?
  • 也可能是classicEservice应用池的问题。如果您创建一个仅包含“Hello World”.aspx 页面的单独虚拟目录,并将虚拟目录配置为使用 classicEservice,该页面会加载吗?如果没有,其他应用程序池是否有效? ASP.NET 在这台机器上工作吗?

标签: asp.net web-config file-permissions internal-server-error configuration-files


【解决方案1】:

“由于权限不足而无法读取配置文件”的错误表示 IIS 工作进程 w3wp.exe 正在一个无权访问 Web.config 的帐户下运行。实际上,您的 Web.config 文件权限屏幕截图显示了一组非常严格的帐户。

首先,确定 w3wp.exe 以哪个帐户运行:

  1. 在 IIS 管理器中,在左侧树中找到并选择您的虚拟目录。
  2. 在右侧的操作窗格中,点击基本设置
  3. 记下配置的应用程序池,然后点击Cancel
  4. 在左侧树中选择应用程序池(它应该在列表顶部附近)。
  5. 在应用程序池列表中,找到您在第 3 步中记下的那个,并查看 Identity 列中的值。

IIS 7.5 及更高版本(Windows 7、Windows Server 2008 R2)

我将假设配置的应用程序池是 DefaultAppPool,它的标识是 ApplicationPoolIdentity,这意味着 IIS 为应用程序池创建了一个 virtual account。 (如果他们是别的东西,请告诉我。)

您需要允许此虚拟帐户访问您的应用程序文件夹:

  1. 在 Windows 资源管理器中,打开包含 Web.config (C:\EnhancedSalesReporting\customerreportingnet\customerreportingnet) 的文件夹的“属性”对话框。
  2. 安全选项卡上,单击编辑按钮打开权限对话框,然后单击添加.
  3. Select Users 对话框中,单击 Locations 按钮,选择您的计算机(可能是列表中的第一项,以及屏幕截图中的 IBM-JBAKER),然后点击确定
  4. 输入要选择的对象名称文本框中, 键入 IIS APPPOOL\DefaultAppPool(不带任何尾随空格),然后单击 确定
    • 或者,您可以通过键入 IIS_IUSRS 来授予对所有 IIS 虚拟帐户的访问权限。
  5. 返回 Permissions 对话框,Allow 列中的 Read & executeRead 复选框应该已经被选中,所以只需点击OK

IIS 6.0/7.0(Windows Vista、Windows Server 2003/2008)

在这些操作系统上,w3wp.exe 作为“真实”帐户(例如 NETWORK SERVICE)而不是虚拟帐户运行。按照上一节中的步骤进行操作,但在第 4 步中,将任务管理器(或 IIS_WPG)中显示的实际帐户替换为 IIS APPPOOL\DefaultAppPool(或 IIS_IUSRS )。

【讨论】:

  • 请参阅更新 4 - 我有 3 个正在运行的进程。
  • 如果您重新启动 IIS,然后立即浏览到您的网站,您是否还会看到多个 w3wp.exe 实例?
  • 通过“重启”还是...?
  • 您可以以管理员身份运行iisreset.exe,或者在IIS管理器中,选择左侧树的根节点,然后单击右侧操作窗格中的重新启动链接。
  • 是否需要在任务管理器中点击显示所有用户的进程
猜你喜欢
  • 2017-01-21
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多