尝试从活动目录检索数据时发生操作错误

本文关键字:操作 错误 数据 检索 活动 | 更新日期: 2023-09-27 18:05:14

我正在尝试从活动目录中获取管理器名称,但在抛出异常时收到错误"发生操作错误"。

代码如下:

public override void ItemAdding(SPItemEventProperties properties)
{
   base.ItemAdding(properties);
   try 
   {
      var requester = properties.Web.CurrentUser;
      properties.AfterProperties["Requester"] = requester;
      //Get the manager name from the active directory
      var domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
   DirectoryEntry dir = new DirectoryEntry("LDAP://" + domain);
      //Exeception occurs on this line below.
      string managerName = dir.Properties["Manager"].Value.ToString();
      properties.AfterProperties["Manager"] = managerName;
   }
   catch(Exception ex)
   {
   }
}

编辑可以使用下面的代码来解决这个问题:

try
    {
        // set up domain context
        PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
        // find a user
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, Environment.UserName);
        string samAccountName = "";

        if (user != null)
        {
            // do something here....     
            samAccountName = user.SamAccountName;
        }

        //Get the manager name from the active directory
        var domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
        using(DirectoryEntry dir = new DirectoryEntry("LDAP://" + domain))
        {
            using (DirectorySearcher ds = new DirectorySearcher(dir, "samAccountName=" + samAccountName))
            {
                SearchResult result = ds.FindOne();
                string managerName = result.Properties["manager"][0].ToString();
            }
        }

    }
    catch (Exception ex)
    {
        var message = ex.Message;
    }

尝试从活动目录检索数据时发生操作错误

您正在尝试从域访问管理器,而不是从请求程序访问。

在winform中,我将这样做,假设requester == samAccountName:

       try
        {
            //Get the manager name from the active directory
            var domain = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
            using (DirectoryEntry dir = new DirectoryEntry("LDAP://" + domain))
            {
                using (DirectorySearcher ds = new DirectorySearcher(dir, "samAccountName=" + requster))
                {
                    SearchResult sr = ds.FindOne();
                    //Exeception occurs on this line below, if the attribute is not set.
                    string managerName = sr.Properties["Manager"][0].ToString();
                }
            }
        }
        catch (Exception ex)
        {
        }