在部署新版本的ASP.NET 2.0应用程序后,它开始引发安全异常:“System.Security.SecurityException:请求获得类型权限'System.Web.AspNetHostingPermission,System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'失败。“ASP.NET中的安全异常和IIS 7.5中的加载用户配置文件选项
经过对互联网的快速研究,我们能够通过在IIS 7.5应用程序池中将“加载用户配置文件”设置为True来解决此问题。该解决方案还这里多次提到的计算器:
- Strange ASP.NET error !
- System.Web.AspNetHostingPermission Exception on New Deployment
- Running a asp.net web application project on IIS7 throws exception
但是,我们无法找到原因,它必须是真实的。我们检查了新版本中的所有更改(很高兴只有少数),但没有发现任何可疑内容(无法访问注册表或临时数据,因为某些文章建议等)。当IIS 7.5中托管的ASP.NET应用程序需要“加载用户配置文件”选项设置为True时,任何人都可以给我们提示吗?
详细说明:
- 应用池:.NET 2.0;管理管道模式 - 经典;身份 - 自定义的域帐户
- 在IIS 6.0(W2K3):新老版本 应用做工精细
- 在IIS 7.5(W2K8-R2):老版 应用程序的正常工作;新应用程序的 版本会引发安全 例外 - 它启动后 设置“加载用户配置文件”工作为True
谢谢!
编辑: 我们终于找到了这个问题的原因!我们的管理员使用不同的技术将新版本的应用程序从暂存环境复制到生产环境。他使用网络服务器作为中介。在将zip压缩版本构建工件加载到生产环境中然后解压缩文件之后,它们仍被标记为“被阻止”,因为它们来自不同的计算机。另见https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a。 然后,ASP.NET以部分信任而不是完全信任的方式逻辑地执行这些二进制文件,实际上在我们的应用程序中引起了所提及的安全异常。
将“加载用户配置文件”设置为True会将安全性异常设置为副作用。如果“加载用户配置文件”设置为False,那么我们的应用程序(不是我们的代码,也许是一些。NET BCL或外部程序集)正在尝试查询有关目录“C:\ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Temporary Internet Files”的应用程序池标识不允许的基本信息:
- 完全信任:拒绝访问该查询操作不会引发任何异常
- 随着部分信任:拒绝访问该查询操作引发安全异常
如果“加载用户配置文件”是设置为True,那么每次应用程序池启动时都会创建Users目录中的临时配置文件。然后,我们的应用程序将尝试查询有关此配置文件的“Temporary Internet Files”目录的信息,该配置文件允许应用程序池的标识。因此,即使部分信任也不会出现异常。
真的很好的故障排除会议! :)
感谢您的调查工作彼得,我有同样的问题和流实用程序(列在superuser.com问题)是我如何解锁我的webapp的目录中的所有文件。现在我可以关闭加载用户配置文件选项! – 2010-08-18 19:32:29
非常出色,我们只是遇到了这个问题,无法正确解释它。 – 2010-11-17 17:24:40
下面的答案有详细的解释http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool – 2016-12-21 07:18:01