C# 使用System.DirectoryServices.AccountManagement时发生DirectoryServices异常

C# 使用System.DirectoryServices.AccountManagement时发生DirectoryServices异常,c#,sharepoint-2007,c#-3.0,account-management,C#,Sharepoint 2007,C# 3.0,Account Management,我正在尝试使用System.DirectoryServices.AccountManager确定用户是否是给定组的成员 我在64位系统上的SharePoint 2007中的SharePoint Web部件中执行此操作 项目目标.NET3.5 在web.config中启用了模拟 有问题的IIS站点正在使用IIS应用程序池,其中域用户配置为标识 我可以将PrincipalContext实例化为: PrincipalContext pc=新PrincipalContext(ContextType.

我正在尝试使用System.DirectoryServices.AccountManager确定用户是否是给定组的成员

  • 我在64位系统上的SharePoint 2007中的SharePoint Web部件中执行此操作
  • 项目目标.NET3.5
  • 在web.config中启用了模拟
  • 有问题的IIS站点正在使用IIS应用程序池,其中域用户配置为标识
我可以将
PrincipalContext
实例化为:

PrincipalContext pc=新PrincipalContext(ContextType.Domain)

接下来,我试着抓住一位校长:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
   GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\somegroup");
   // snip: exception thrown by line above.
}
以上和用户SAM的
UserPrincipal.FindByIdentity
都会抛出一个
DirectoryServicesCOMException
:“登录失败:未知用户名或错误密码”

我已尝试将完整的SAMAccountName传递给
FindByIdentity
(以MYDOMAIN\username的形式)或仅传递给用户名,但行为没有改变。我尝试过使用
HostingEnvironment.Impersonate
SPSecurity.RunWithElevatedPrivileges
方法使用其他凭据执行代码,也得到了相同的结果

我还尝试用域名实例化我的上下文:

PrincipalContext pc=newprincipalcontext(ContextType.Domain,“MYDOMAIN”)

这会引发
PrincipalServerDownException
:“无法联系服务器。”

我正在一台经过合理加固的服务器上工作。我没有锁定系统,所以我不确定到底对它做了什么。如果有凭据需要分配给池标识的用户或域安全策略中的用户,以便这些凭据正常工作,我可以相应地配置域。是否有任何设置会阻止我的代码运行?我是否在代码本身中遗漏了什么?这在SharePoint web中是不可能的吗

编辑: 经过进一步的测试,我的代码在针对.NET4.0的控制台应用程序中测试时功能正常。我瞄准了一个不同的框架,因为我在瞄准.NET 3.5时,由于某种原因,控制台应用程序中没有AccountManagement

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
using (UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, "MYDOMAIN\joe.user"))
using (GroupPrincipal adGroup = GroupPrincipal.FindByIdentity(pc, "MYDOMAIN\user group"))
{
   if (adUser.IsMemberOf(adGroup))
   {
       Console.WriteLine("User is a member!");
   }
   else
   {
       Console.WriteLine("User is NOT a member.");
   }
}

我的SharePoint环境中的哪些变化可能会阻止此功能的执行?

我将IIS应用程序池使用的帐户添加到管理员组,此问题已得到解决。

您可能应该注意,这是“正义的铁拳”方法,对于面向生产或互联网的系统来说,这不是一个推荐的解决方案。@Burly-很好的观点。这适用于我的环境:断开网络上的内部系统。这不是一个我很满意的解决方案,但它是一个解决方案,所以它现在就可以了。我真的希望能得到一些指导,比如管理员有什么特权使代码能够无误地执行。我希望删除该用户的管理权限,并授予一些更安全的权限,同时按照我的要求继续操作。@antik您是否最终删除了管理权限并能够毫无例外地执行此操作?