将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:ApplicationPoolIdentity默认情况下保留应用程序池标识(如IIS应用程序池标识中所推荐),Ninject似乎被忽略,因为我得到以下错误,同时创建了第一控制器:
System.InvalidOperationException:尝试创建类型为"..MainController"的控制器时发生错误.确保控制器具有无参数的公共构造函数.---> System.DirectoryServices.DirectoryServicesCOMException:发生操作错误.
我试图授予FullAccess到IIS AppPool\<MySiteAppPool>文件夹,包含该网站(包括所有子文件夹和文件),但这并没有改变任何东西.
但是,当我将应用程序池标识设置为任何域帐户(即使是简单的帐户,没有管理权限,以及没有任何访问该站点的文件夹)时,它仍然可以正常工作.
根据通过NuGet包设置MVC3应用程序教程来安装Ninject .
我不确定,如果它是相关的,该站点应该在具有Windows身份验证的域Intranet中工作.
因此,唯一的问题似乎是应用程序池标识.至于我渴望使用推荐的方式,我很乐意拥有ApplicationPoolIdentity,而不是域帐户.
这有什么用?是否可以将所有这些混合在一起?
这是一个具有类似问题的SO线程:ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数.但是根本没有合适的答案.
作为删除的评论建议,我尝试使用NetworkSerive身份.它运作正常.但是,我想这并不比非特权域帐户好多少.
编辑
突然发现另一个依赖:应用程序池标识用于sql server上的Windows身份验证,但我希望在那里使用客户端用户的凭据.
根据评论
同意通过模拟可以使用经过身份验证的凭据访问远程SQL Server.
但是,仍然不清楚ApplicationPoolIdentity和Ninject的问题是什么.
在这个问题的最顶部提到的文章让我想到这可能是因为虚拟帐户没有用户配置文件.这个方面对我来说仍然不清楚,因为仍然可以使IIS能够使用该LoadUserProfile属性加载用户配置文件.如果虚拟帐户没有配置文件,我无法获取,IIS将加载什么?
有人说:
IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据.SQL Express是执行此操作的应用程序的示例.但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中.NETWORKSERVICE帐户的用户配置文件由系统创建,始终可用.但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件.只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件.如果管理员创建新的应用程序池,则不会创建用户配置文件.
但是,如果需要,可以通过将"LoadUserProfile"属性设置为"true"来配置IIS应用程序池以加载用户配置文件.
我在serverfault.com上找到了以下主题:
在那里还指出,应用程序池标识不能用作网络服务,特别是查询AD.