Я пытаюсь программно обновить различные свойства AD из веб-службы С#.
Я могу обновить телефон/офис/название и т. д. без проблем, но когда я пытаюсь обновить ThumbnailPhoto, я получаю сообщение об ошибке: указанный атрибут или значение службы каталогов уже существует
Я обновляю через расширенный класс (в соответствии с Получить должность с помощью System.DirectoryServices. Управление аккаунтом)
Код, который я использую для обновления записи AD:
public ADRecord UpdateADRecord(string UserName)
{
DeltekRecord dr = GetDeltekRecord(UserName);
UserPrincipalEx upx = GetUser(UserName);
upx.Office = GetFriendlyFieldName(dr.Office);
upx.MobilePhone = dr.MobilePhone;
upx.TelephoneNumber = dr.WorkPhone;
upx.Department = GetFriendlyFieldName(dr.BusinessUnit);
upx.Title = dr.Title;
// Handle Company
string Company = "";
if ((dr.Org ?? "").Contains(":FOO:"))
Company = "Foo";
else
Company = "Bar";
upx.Company = Company;
// Handle Home Phone
string HomeNo = "";
if ((dr.WorkPhone.Length > 0) && (dr.Office.Length > 0))
{
switch (dr.Office.ToLower()) {
case "washington":
HomeNo = "8" + dr.WorkPhone.Substring(dr.WorkPhone.Length - 3, 3);
break;
case "ohio":
HomeNo = "9" + dr.WorkPhone.Substring(dr.WorkPhone.Length - 3, 3);
break;
case "nooyoik":
HomeNo = "2" + dr.WorkPhone.Substring(dr.WorkPhone.Length - 3, 3);
break;
default:
HomeNo = "";
break;
}
}
upx.Thumbnail = null;
upx.Thumbnail = GetThumbnail(dr.Employee);
upx.Save();
ADRecord adr = GetADRecord(UserName);
return adr;
}
Некоторые гуглы предполагают, что мне нужно сначала очистить атрибут эскиза. Попробовали установить его на ноль, как указано выше, но без радости.
РЕДАКТИРОВАТЬ: ДОБАВИТЬ МЕТОДЫ, КОТОРЫЕ Я ПРОПУСТИЛ РАНЬШЕ
// Get the relevant details from AD
[WebMethod]
public ADRecord GetADRecord(string userName)
{
ADRecord adr = new ADRecord();
PrincipalContext oPrincipalContext = GetPrincipalContext();
// Search the directory for the new object.
UserPrincipalEx myUser = UserPrincipalEx.FindByIdentity(oPrincipalContext, userName);
if (myUser != null)
{
adr.Company = myUser.Company;
adr.Department = myUser.Department;
adr.HomePhone = myUser.HomePhone;
adr.MobilePhone = myUser.MobilePhone;
adr.Office = myUser.Office;
adr.TelephoneNumber = myUser.TelephoneNumber;
adr.ThumbNail = myUser.Thumbnail;
adr.Title = myUser.Title;
}
return adr;
}
// Get the user's thumbnail
[WebMethod]
public byte[] GetThumbnail(int EmpNo)
{
System.Net.WebClient wclient = new System.Net.WebClient();
wclient.Credentials = new System.Net.NetworkCredential("user","pass", "domain");
string url = "http://myurl.mycompany.com/PeopleEmployeePhoto.ashx?Employee=" + EmpNo;
byte[] imageData;
using (wclient)
{
imageData = wclient.DownloadData(new Uri(url));
}
return imageData;
}