使用 Visual Studio 或 Visual Web Developer 使用SQL Server Compact部署 ASP.NET Web 应用程序:设置文件夹权限 - 6/12

作者 :Tom Dykstra

下载初学者项目

本系列教程介绍如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web) 包含SQL Server Compact数据库的 ASP.NET Web 应用程序项目部署 (发布。 如果安装 Web 发布更新,也可以使用 Visual Studio 2010。 有关该系列的简介,请参阅 系列中的第一个教程

有关演示 Visual Studio 2012 RC 版本后引入的部署功能的教程,演示如何部署除 SQL Server Compact 以外的SQL Server版本,并演示如何部署到Azure 应用服务 Web 应用,请参阅使用 Visual Studio ASP.NET Web 部署

概述

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

使用 Visual Studio 开发服务器 (Cassini) 在 Visual Studio 中测试 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:

Error_page_Test

现在运行 Elmah.axd 以查看错误报告。 你会看到一个空的错误日志页,因为 Elmah 无法在 Elmah 文件夹中创建 XML 文件:

Error_log_page_empty

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

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

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

Elmah_folder_Properties_Security_tab

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

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

Permissions_for_Elmah_dialog_box

在两个对话框中单击“ 确定 ”。

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

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

Elmah_Error_Log_page_Test

还需要App_Data文件夹的写入权限,因为在该文件夹中SQL Server Compact数据库文件,并且希望能够更新这些数据库中的数据。 但是,在这种情况下,无需执行任何其他操作,因为部署过程会自动设置 对 App_Data 文件夹的写入权限。

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

更多信息

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

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