将我的网站部署到 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 = No parameterless constructor defined for this object。然而,那里也没有合适的答案。
正如已删除的评论所建议的那样,我尝试使用NetworkSerive
作为身份。它工作正常。但是,我想这并不比非特权域帐户好多少。
编辑
突然发现另一个依赖关系:应用程序池标识用于 sql server 上的 windows 身份验证,尽管我希望客户端用户的凭据在那里使用。
根据评论
同意可以通过模拟使用经过身份验证的凭据访问远程 sql 服务器。
但是,仍然不清楚 ApplicationPoolIdentity 和 Ninject 的问题是什么。
这个问题最开头提到的文章让我认为这可能是由于虚拟帐户没有用户个人资料这一事实造成的。这方面对我来说仍然不清楚,因为仍然可以使 IIS 加载具有该LoadUserProfile
属性的用户配置文件。我不明白,如果没有虚拟帐户的配置文件,IIS 将加载什么?
那里说:
IIS 不加载 Windows 用户配置文件,但某些应用程序可能会利用它来存储临时数据。SQL Express 是执行此操作的应用程序示例。但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中。NETWORKSERVICE 帐户的用户配置文件由系统创建并且始终可用。但是,切换到唯一的应用程序池身份后,系统不会创建任何用户配置文件。只有标准应用程序池(DefaultAppPool 和 Classic .NET AppPool)在磁盘上有用户配置文件。如果管理员创建新的应用程序池,则不会创建用户配置文件。
但是,如果需要,您可以通过将“LoadUserProfile”属性设置为“true”来配置 IIS 应用程序池以加载用户配置文件。
我在 serverfault.com 上找到了以下线程:
那里还指出,应用程序池身份无法作为网络服务工作,特别是查询 AD。