thumbnailPhoto没有全局目录

时间:2017-03-02 11:19:56

标签: c# asp.net-mvc active-directory directoryservices

我创建了一个AD林,使用其全局目录连接字符串在林中的所有域中搜索用户。

我正在尝试使用c#代码获取AD用户的thumbnailPhoto。但是我没有在结果对象中获得thumbnailPhoto属性,即使它存在于AD中。

我使用PowerShell验证了AD中的thumbnailPhoto道具。我也通过使用LDAP连接字符串验证了它。这两种情况我都得到了字节数组。

以下是获取用户及其属性的代码,_configuration.GlobalCatalog返回格式为(GC:// domain-name)的全局编录连接字符串。

public Task<ProfileImage> GetProfileImageByEmail(string email)
{
    var filterQuery = ("mail=" + email);
    return Task.FromResult(GetProfileImageFromAD(filterQuery));
}

private ProfileImage GetProfileImageFromAD(string filterQuery)
{
    var result = GetADUserDetails(filterQuery);

    if (result == null)
        return null;

    if (result.Properties.Contains("thumbnailPhoto"))
    {
        var imageBytes = result.Properties["thumbnailPhoto"][0] as byte[];

        if (imageBytes != null)
        {
            return new ProfileImage
            {
                Content = new MemoryStream(imageBytes),
                ContentType = "image/jpeg"
            };
        }
    }

    return null;
}

private SearchResult GetADUserDetails(string filterQuery)
{
    using (var userBinding = new DirectoryEntry(_configuration.GlobalCatalog))
    {

        using (DirectorySearcher adSearch = new DirectorySearcher(userBinding))
        {
            adSearch.ReferralChasing = ReferralChasingOption.All;
            adSearch.Filter = filterQuery;
            adSearch.PropertiesToLoad.Add("mail");
            adSearch.PropertiesToLoad.Add("sn");
            adSearch.PropertiesToLoad.Add("givenName");
            adSearch.PropertiesToLoad.Add("thumbnailPhoto");

            return adSearch.FindOne();
        }
    }
}

感谢任何帮助。

更新: Run LDP on AD to get user details

1 个答案:

答案 0 :(得分:0)

在域控制器上打开ADSIEdit,连接到架构命名上下文,找到属性CN = Picture,CN = Schema,CN = Configuration ...并转到它的属性。验证isMemberOfPartialAttributeSet是否设置为TRUE