You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#更新AD用户照片时出现约束违反错误求助

问题分析与解决方案

你的代码存在两个关键问题,导致了Active Directory的约束违反错误:

1. 未实际读取图片文件内容

你创建了文件流和字节数组,但没有执行读取操作就关闭了文件流,导致binaryData是一个全为0的空数组,AD不允许将无效的空数据写入thumbnailPhoto属性。

修复读取部分的代码:

// Open file并读取内容
using (System.IO.FileStream inFile = new System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
    byte[] binaryData = new byte[inFile.Length];
    // 执行读取操作,将文件内容写入字节数组
    int bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
}

使用using语句可以自动释放文件流资源,避免资源泄漏问题。

2. 图片格式/大小不符合AD约束

AD的thumbnailPhoto属性有明确的格式限制:

  • 必须是JPEG格式的图片(不支持PNG、BMP等其他格式)
  • 图片大小通常不能超过100KB(部分域环境可能限制为10KB,取决于具体配置)
  • 推荐像素尺寸为96x96(AD默认的缩略图标准尺寸)

如果图片不符合这些要求,即使读取了正确内容,也会触发约束违反错误。

额外优化建议

  • 过滤条件中的&是HTML转义字符,直接使用&即可:
    query.Filter = "(&(objectClass=user)(sAMAccountName=" + employeeUsername + "))";
    
  • 操作属性前先判断属性是否存在,避免空引用问题:
    if (user.Properties["thumbnailPhoto"].Count > 0)
    {
        user.Properties["thumbnailPhoto"].Clear();
    }
    

内容的提问来源于stack exchange,提问作者Fabian Rico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:07:32