将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:默认情况下应用程序池标识为ApplicationPoolIdentity
(IIS Application Pool Identities中推荐)时,Ninject
似乎被忽略,因为出现以下错误创建第一个控制器:如何正确设置IIS 7应用程序池标识?
System.InvalidOperationException:试图 当创建 类型的控制装置发生了错误“..MainController”。确保 控制器有一个无参数的公共构造函数。 ---> System.DirectoryServices.DirectoryServicesCOMException:发生操作 错误。
我试图给予FullAccess
到IIS AppPool\<MySiteAppPool>
到文件夹,包含该网站(包括所有子文件夹和文件),但这并没有改变任何东西。
但是,当我将应用程序池标识设置为任何域帐户(即使是简单的,没有管理权限,也没有任何对该站点文件夹的访问权限)时,它可以正常工作。
Ninject根据Setting up an MVC3 application教程通过NuGet包安装。
我不确定,如果它是相关的,该网站应该在Windows身份验证的域Intranet中工作。
所以,唯一的问题似乎与应用程序池的身份。据我急于使用推荐的方式,我喜欢有ApplicationPoolIdentity
,而不是一个域帐户。
这可以连接什么?是否有可能将所有这些混合在一起?
下面是一个SO有类似的问题线程:ASP.NET MVC 4 + Ninject MVC 3 = No parameterless constructor defined for this object。然而,在那里也没有合适的答案。
作为建议删除的评论,我尝试使用NetworkSerive
作为身份。它运作正常。但是,我想这比没有特权的域帐户好多了。
编辑
突然发现另一相关性:应用程序池标识用于SQL Server上的Windows身份验证,但笔者预计客户端用户的凭据并在那里使用。
基于评论
同意,远程SQL Server可以通过模拟的验证的凭据访问。
但是,仍然不清楚ApplicationPoolIdentity和Ninject存在什么问题。
在这个问题的最顶端文章mentiond让我想,这可能由以下事实造成的,即虚拟账户没有用户配置文件。这方面仍然不清楚,因为我们仍然可以启用IIS来加载具有LoadUserProfile
属性的用户配置文件。我无法得到,如果虚拟帐户没有配置文件,IIS将加载什么?
它的存在表示:
IIS不会加载Windows用户配置文件,但某些应用可能 利用它反正来存储临时数据。 SQL Express 是执行此操作的应用程序的一个示例。但是,必须创建用户 配置文件才能将临时数据存储在 配置文件目录或注册表配置单元中。网络服务帐户 的用户配置文件是由系统创建的,并始终可用 。但是,通过切换到唯一的应用程序池 身份,系统不会创建用户配置文件。只有 标准应用程序池(DefaultAppPool和Classic .NET AppPool) 具有磁盘上的用户配置文件。如果 管理员创建新的应用程序池,则不会创建用户配置文件。
但是,如果需要,可以通过将“LoadUserProfile”属性设置为“true”来将IIS应用程序池配置为加载 用户配置文件。
我发现下面的线程上serverfault.com:
How can I assign active directory permission to the default app pool identity
在那里,它也指出,应用程序池的身份是不能作为网络服务工作,特别是查询AD。
您授予完全访问权限给谁? – V4Vendetta 2013-03-28 08:32:53
@ V4Vendetta我将'FullAccess'授予'IIS AppPool \'到包含该站点的文件夹(包括所有子目录和文件) –
horgh
2013-03-28 08:35:15
好吧,你有什么额外的事件日志显示吗? – V4Vendetta 2013-03-28 08:48:02