ac#WebサービスからさまざまなADプロパティをプログラムで更新しようとしています。
電話/オフィス/タイトルなどは問題なく更新できますが、ThumbnailPhotoを更新しようとすると、次のエラーが発生します。指定されたディレクトリサービスの属性または値はすでに存在します
拡張クラスを介して更新しています(System.DirectoryServices.AccountManagementを使用して役職を取得するように)
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;
}
一部のグーグルは、最初にサムネイル属性をクリアする必要があることを示唆しています。上記のようにnullに設定しようとしましたが、喜びはありません。
編集:私が前に見逃した方法を追加する
// 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;
}