当你使用Visual Studio的Visual Studio Development Server (Cassini)进行测试的时候,程序是运行在你的系统登陆账户授权之下的,一般情况都是用administrator账户,这样它就有了全部的权限来做任何事情了。但当程序运行在IIS上的时候,他的授权是该站点的应用程序池所设置的账户,默认情况下这种账户只有读取和执行的权限,而没用写权限。
程序一般都需要上传或更新文件的功能,这就成了问题,例如,在Contoso University程序里,系统出错的时候Elmah会在Elmah目录下创建XML格式的日志文件。 即便不使用像Elmah这样的工具,你的站点也可能需要让用户上传头像啥的。
本章节,我们测试结果是,刚开始之前写不了日志,设置写权限以后,再测试就可以正常写入文件了。
提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。
验证程序在IIS是否能正常工作(尽管在VS里是没问题的),你可以模拟的一个错误,然后打开Elmah错误日志,查看是否正确记录错误信息,如果没用正常创建XML日志的话,它将显示空的报告页面。
打开浏览器访问http://localhost/ContosoUniversity,输入一个非法的URL地址,这样系统就会产生一个黄页错误(因为Web.config里错误信息配置的是"RemoteOnly"而你是在本机IIS上运行,所以不是显示自定义页面GenericErrorPage.aspx):
现在打开Elmah.axd来查看错误报告,使用管理员账户("admin"/ "Pas$w0rd")登录以后,你将看到一个空记录的页面:
没用任何错误报告,那是因为Elmah没用在Elmah文件夹成功创建XML日志文件。
设置文件夹权限,你可以手工设置,也可以通过部署流程里自动化设置。使用自动化设置的话需要十分复杂的MSBuild代码,鉴于这个事情只是在第一次部署的时候做,所以本章节只是展示如果手工来赋权限。(关于自动化设置权限的信息,你可以访问:Setting Folder Permissions on Web Publish。)
打开资源管理器,找到你程序部署的目录C:\inetpub\wwwroot\ContosoUniversity,右键Elmah文件夹,选择属性-安装选项卡:
(如果在组或用户名Group or user names看不到DefaultAppPool,你可能需要在你的机器上为IIS和ASP.NET4设置一个账户,本章节你要找的账户就是Contoso University程序所用的应用程序池用到的账户,然后添加进来并赋予写权限。关于应用程序池认证的信息,可以查看页面底部的连接。)
点击编辑Edit,在Permissions for Elmah对话框里选择DefaultAppPool,然后在允许列(Allow)选择Write check box。
点击确认关闭对话框。
用同样的方式(访问非法URL地址)模拟一个错误,然后打开错误日志页面,这时候可以发现错误日志已经显示在页面上了。
像SQL Compact 数据库更新一样,也需要App_Data文件夹的写权限,不过,因为部署流程会自动给App_Data设置写权限,所以我们不需要手工去做额外的工作了。
现在,你已经完成了在本机IIS上运行Contoso University 程序所需要的必要工作了。下一章节我们将把程序部署到主机提供商的生产环境上,让程序可以公开访问。
这个例子里,Elmah不能保存日志的原因很容易发现,可以通过跟踪IIS就能知道。具体信息请查看:Troubleshooting Failed Requests Using Tracing in IIS 7。
如果给应用程序池身份赋权,请访问:Application Pool Identities和Secure Content in IIS Through File System ACLs。