Ошибка указанного атрибута службы каталогов или значения уже существует при обновлении эскиза Active Directory

Я пытаюсь программно обновить различные свойства 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;

    }

person Ben    schedule 20.12.2012    source источник
comment
у вас есть 2 метода ниже, которые вы не показываете, что эти методы делают ... что приводит к тому, что вы начинаете читать мысли ... пожалуйста, покажите, как изображения получают свои значения и / или атрибуты из AD, также вы можете обернуть часть кода для пример GetUserName, возможно, есть ошибка, которую вы не перехватываете   -  person MethodMan    schedule 20.12.2012


Ответы (1)


Я не знаком с UserPrincipalEx, но я предполагаю, что вам нужно вызвать функцию «Сохранить» после того, как вы установите для эскиза значение null, чтобы фактически очистить его на сервере.

person Sean Hall    schedule 21.12.2012