被这个恼人的问题困扰很久了。
当把IIS 7的应用程序池的用户标识由“NetworkService”改为“ApplicationPoolIdentity”(如下图),会在应用程序池回收的某些情况下出现这个问题。
为什么要把“NetworkService”改为“ApplicationPoolIdentity”?由于NetworkService具有管理员的权限,如果不改为ApplicationPoolIdentity,会存在安全隐患。
注:在英文版的Windows Server 2008中,创建应用程序池时,会默认使用NetworkService帐户。
出现问题时,浏览器中会出现“Execution permission cannot be acquired”的错误信息:
这个问题出现在某种条件触发应用程序池回收,ASP.NET重新进行编译时,但不是每次都出现,只是偶尔会出现。
今天终于在Stack Overflow找到了线索:Intermittent PolicyException: Execution permission cannot be acquired.
解决办法就是在应用程序池的高级设置中将Load User Profile由False改为True,如下图: