使用 Visual Studio ASP.NET Web 部署:设置文件夹权限

作者 :Tom Dykstra

下载初学者项目

本教程系列介绍如何使用 Visual Studio 2012 或 Visual Studio 2010 将 (发布) ASP.NET Web 应用程序部署到Azure 应用服务 Web 应用或第三方托管提供程序。 有关该系列的信息,请参阅 系列中的第一个教程

概述

在本教程中,你将在部署的网站中为 Elmah 文件夹设置文件夹权限,以便应用程序可以在该文件夹中创建日志文件。

在 Visual Studio 中使用 Visual Studio 开发服务器 (Cassini) 或 IIS Express 测试 Web 应用程序时,应用程序将在标识下运行。 你很可能是开发计算机上的管理员,并且拥有对任何文件夹中的任何文件执行任何操作的完全权限。 但是,当应用程序在 IIS 下运行时,它将在为站点分配到的应用程序池定义的标识下运行。 这通常是具有有限权限的系统定义帐户。 默认情况下,它拥有对 Web 应用程序的文件和文件夹的读取和执行权限,但它没有写入访问权限。

如果应用程序创建或更新文件,这将成为一个问题,这是 Web 应用程序中的常见需求。 在 Contoso University 应用程序中,Elmah 在 Elmah 文件夹中创建 XML 文件,以保存有关错误的详细信息。 即使不使用类似 Elmah 的内容,您的网站也可能允许用户上传文件或执行将数据写入网站文件夹中的其他任务。

提醒:如果在完成本教程时收到错误消息或某些内容不起作用,请确保检查故障排除页面

测试错误日志记录和报告

若要查看应用程序如何在 IIS (尽管在 Visual Studio) 中测试应用程序时正常运行,则可能会导致一个通常由 Elmah 记录的错误,然后打开 Elmah 错误日志以查看详细信息。 如果 Elmah 无法创建 XML 文件并存储错误详细信息,则会看到空的错误报告。

打开浏览器并转到 http://localhost/ContosoUniversity,然后请求无效的 URL,如 Studentsxxx.aspx。 你会看到系统生成的错误页,而不是 GenericErrorPage.aspx 页,因为 customErrors Web.config 文件中的设置为“RemoteOnly”,并且你在本地运行 IIS:

HTTP 404 错误页

现在运行 Elmah.axd 以查看错误报告。 使用管理员帐户凭据 (“admin”和“devpwd”) 登录后,会看到一个空的错误日志页,因为 Elmah 无法在 Elmah 文件夹中创建 XML 文件:

错误日志为空

设置对 Elmah 文件夹的写入权限

可以手动设置文件夹权限,也可以将其作为部署过程的自动部分。 使其自动需要复杂的 MSBuild 代码,并且由于你只需在首次部署时执行此操作,因此以下步骤如何手动执行此操作。 (有关如何使部署过程成为这一部分的信息,请参阅 Sayed Hashimi 博客 上的设置 Web 发布上的文件夹权限 。)

  1. 文件资源管理器中,导航到 C:\inetpub\wwwroot\ContosoUniversity。 右键单击 “Elmah ”文件夹,选择“ 属性”,然后选择“ 安全 ”选项卡。

  2. 单击 “编辑”

  3. 在“Elmah 的权限”对话框中,选择“DefaultAppPool”,然后选择“允许”列中的“写入检查”框。

    ELMAH 文件夹的权限

    (如果在“组或用户名”列表中未看到 DefaultAppPool,则可能使用本教程中指定的其他方法在计算机上设置 IIS 和 ASP.NET 4。在这种情况下,请找出分配给 Contoso University 应用程序的应用程序池所使用的标识,并授予该标识的写入权限。请参阅本教程末尾有关应用程序池标识的链接。) 在这两个对话框中单击“确定”。

重新测试错误日志记录和报告

通过再次引发错误来测试 (请求错误 URL) 并运行 “错误日志 ”页。 这一次,错误会显示在页面上。

ELMAH 错误日志页

总结

现已完成使 Contoso University 在本地计算机上的 IIS 中正常工作所需的所有任务。 在下一教程中,将通过将站点部署到 Azure 来使其公开可用。

详细信息

在此示例中,Elmah 无法保存日志文件的原因相当明显。 在问题原因不太明显的情况下,可以使用 IIS 跟踪;请参阅在 IIS.net 站点上使用 IIS 7 中的跟踪排查失败的请求

有关如何向应用程序池标识授予权限的详细信息,请参阅 IIS.net 站点上的 应用程序池标识 和安全 在 IIS 中通过文件系统 ACL 保护内容