C# 正在将thumbnailPhoto属性写入Active Directory
我正在创建一个应用程序(.Net 3.5),允许用户在Active Directory中更新自己的照片和电话号码 我使用的是UserPrincipal类,我使用这个 我得到字节数组并用C# 正在将thumbnailPhoto属性写入Active Directory,c#,active-directory,C#,Active Directory,我正在创建一个应用程序(.Net 3.5),允许用户在Active Directory中更新自己的照片和电话号码 我使用的是UserPrincipal类,我使用这个 我得到字节数组并用 pictureBoxthumbnail.Image = Image.FromStream(new MemoryStream(userPrincipal.thumbnailPhoto)); 这张表上的图片,到目前为止还不错。当我尝试将映像写入Active Directory时,我将pictureBox转换为字节数
pictureBoxthumbnail.Image = Image.FromStream(new MemoryStream(userPrincipal.thumbnailPhoto));
这张表上的图片,到目前为止还不错。当我尝试将映像写入Active Directory时,我将pictureBox转换为字节数组,并使用
userPrincipal.thumbnailPhoto = ImageManipulation.imageToByteArray(pictureBoxthumbnail.Image);
public static byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms.ToArray();
}
并尝试保存数据,但出现以下异常
System.DirectoryServices.AccountManagement.PrincipalOperationException未处理
消息=未指定的错误
Source=System.DirectoryServices.AccountManagement
错误代码=-2147467259
我怀疑我的pictureBox到字节数组是错误的。有人能帮忙吗
谢谢。我今天通过使用下面的功能实现了这一点。希望这能帮助其他人
private void UpdatePhoto()
{
var principalContext = new PrincipalContext(ContextType.Domain);
var userPrincipal = UserPrincipalEx.FindByIdentity(principalContext, System.Environment.UserName);
DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}:389/{1}", principalContext.ConnectedServer, userPrincipal.DistinguishedName));
directoryEntry.Properties["thumbnailPhoto"].Value = ImageManipulation.imageToByteArray(pictureBoxthumbnail.Image);
directoryEntry.CommitChanges();
}
-2147467259=
0x80004005
=访问被拒绝-确定您有权设置该属性?我可以清除缩略图。使用ADPhotoEdit作为我自己,我可以上传一张新照片。可能是权限问题。我不认为这是权限问题。我想让你调试它,并确保,让我们知道你是哪一行得到这个错误。我之前编写过相同类型的应用程序,在尝试将代码包含在using for MemoryStream中时收到了错误代码。当信息保存到AD时会发生这种情况。在我为userPrincipal.thumbnailPhoto设置新值后,我会调用userPrincipal.Save(),这就是发生异常的时候。
private void UpdatePhoto()
{
var principalContext = new PrincipalContext(ContextType.Domain);
var userPrincipal = UserPrincipalEx.FindByIdentity(principalContext, System.Environment.UserName);
DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}:389/{1}", principalContext.ConnectedServer, userPrincipal.DistinguishedName));
directoryEntry.Properties["thumbnailPhoto"].Value = ImageManipulation.imageToByteArray(pictureBoxthumbnail.Image);
directoryEntry.CommitChanges();
}