作者:Tom Dykstra
本教程系列介绍如何使用 Visual Studio 2012 或 Visual Studio 2010 将 ASP.NET Web 应用程序部署到 Azure 应用服务 Web 应用或第三方托管提供程序。 有关该系列的信息,请参阅 该系列中的第一个教程。
概述
在本教程中,你将为已部署网站中的 Elmah 文件夹设置文件夹权限,以便应用程序可以在该文件夹中创建日志文件。
使用 Visual Studio 开发服务器(Cassini)或 IIS Express 在 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:
现在运行 Elmah.axd 以查看错误报告。 使用管理员帐户凭据(“admin”和“devpwd”登录后),会看到一个空的错误日志页,因为 Elmah 无法在 Elmah 文件夹中创建 XML 文件:
设置对 Elmah 文件夹的写入权限
可以手动设置文件夹权限,也可以使其成为部署过程的自动部分。 使它自动需要复杂的 MSBuild 代码,并且由于只需在首次部署时执行此操作,以下步骤如何手动执行此操作。 (关于如何将此部分纳入部署过程的相关信息,请参阅 Sayed Hashimi 博客上的 Web 发布设置文件夹权限。)
在 文件资源管理器中,导航到 C:\inetpub\wwwroot\ContosoUniversity。 右键单击 Elmah 文件夹,选择“ 属性”,然后选择“ 安全 ”选项卡。
单击 “编辑” 。
在“Elmah 权限”对话框中,选择 DefaultAppPool,然后在“允许”列中选中“写入”复选框。
(如果在“组”或“用户名”列表中看不到 DefaultAppPool,则可能使用本教程中指定的其他方法在计算机上安装 IIS 和 ASP.NET 4。在这种情况下,请了解分配给 Contoso University 应用程序的应用程序池使用的标识,并向该标识授予写入权限。请参阅本教程末尾有关应用程序池标识的链接。在这两个对话框中单击“确定”。
重新测试错误日志记录和报告
再次通过故意请求错误的 URL 来引发错误,然后运行 错误日志 页面进行测试。 这一次,错误会显示在页面上。
总结
现在,你已完成使 Contoso University 在本地计算机上在 IIS 中正常工作所需的所有任务。 在下一个课程中,你将通过在 Azure 上部署,使站点公开可用。
详细信息
在此示例中,Elmah 无法保存日志文件的原因相当明显。 在问题原因不明显的情况下,可以使用 IIS 跟踪,请参阅 IIS.net 站点上的 使用跟踪排查 IIS 7 中的失败请求。
有关如何向应用程序池标识授予权限的详细信息,请参阅 IIS.net 站点上的应用程序池标识和通过文件系统 ACL 保护 IIS 中的内容。