userprincipal.FindByIdentity在一台服务器上成功,但不在另一台服务器上成功

时间:2012-06-28 15:10:15

标签: c# asp.net active-directory

我的任务是将一些c#v4应用程序从一台服务器迁移到另一台服务器,我遇到了一个aspx表单的问题。

表单调用类以在其代码隐藏文件中搜索AD用户。它调用的方法如下。

    public UserPrincipal GetADUser(string samAccountName)
        {
        try
        {
            UserPrincipal user = UserPrincipal.FindByIdentity(AD.domainContext, samAccountName);
            return user;
        }
        catch(Exception ex)
        {
            throw new Exception(" Cant perform this operation:-"+ex.Message);
        }
    }

AD.domainContext定义如下

private static PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, ConfigurationHandler._ADDomain);

我的问题是该方法适用于我的两台服务器(VS Dev和当前正在运行迁移的代码的服务器),并在尝试迁移到的服务器上抛出异常。所有服务器都是相同的环境Windows Server 2k8 R2运行iis 7.5

抛出的错误是

无法执行此操作: - 发生操作错误。

我进行了搜索并发现了以下stackoverflow问题,但似乎没有解决问题

System.DirectoryServices.AccountManagement.PrincipalContext and Impersonation in a WCF service

Active Directory COM Exception - An operations error occurred (0x80072020)

有没有人知道什么会导致在一个环境而不是其他任何环境中抛出此错误?

我已经尝试调试代码,它在VS调试中工作正常,但是当代码部署到所述服务器时就是我遇到问题。

任何帮助,想法,想法都会非常感激。

如果我忘记包含任何内容,我很乐意详细说明所提供的任何信息。

提前致谢

尼古拉斯

1 个答案:

答案 0 :(得分:1)

对于遇到类似问题的其他人,解决方案似乎是需要向查询AD提供用户名和密码,除非您在IIS中启用了用户操作。

简单地用以下方法修改我的方法解决了问题

private static PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, null,ConfigurationHandler._ADDomain, ConfigurationHandler._ADUser, ConfigurationHandler._ADPassword);

谢谢

尼古拉斯