Хорошо, поэтому я пытаюсь вытащить пользователя из активной директории в объект DirectoryUser, и если я наберу его так, он работает нормально:
DirectoryEntry user = new DirectoryEntry(@"LDAP://CN=Name, OU=Department, OU=Group, DC=Domain1, DC=Domain2");
user.Properties["thumbnailPhoto"].Clear();
Но мне нужны значения, чтобы иметь возможностьменялись, поэтому я попытался отформатировать строку:
string ldap = string.Format("LDAP://CN={0}, OU={1}, OU={2}, DC={3}, DC={4}", cn, group, ou, domain1, domain2);
DirectoryEntry user = new DirectoryEntry(ldap);
user.Properties["thumbnailPhoto"].Clear();
Но это вызывает ошибку «На сервере такого объекта нет»
Конструктор принимает строку, и я передаюте же самые точные значения, которые я использовал, когда писал буквально, почему он работает в одну сторону, а не в другую?!
РЕДАКТИРОВАТЬ: Я просто хотел добавить, что я дважды проверил несколько разных способов, чтобы убедиться, чтовстроенная строка получалась идентичной жестко закодированной строке, и это так.Я запустил отладчик и проверил значение user.path, чтобы убедиться, что строки хранятся точно так же.Пока все идентично, но одно работает, а другое нет!
ОБНОВЛЕНИЕ: Я заметил, что если я жестко кодирую непосредственно в строковую переменную:
string ldap = @"Jeremy Stafford", "IT", "QGT", "QGT", "Local";
DirectoryEntry user = new DirectoryEntry(ldap);
Это работает просто отлично,Это приводит меня к мысли, что может быть проблема со строкой «type».Может быть, если бы я мог преобразовать построенную строку обратно в примитивную строку (или, скорее, тип значения по сравнению с ссылочным типом), это сработало бы?Но я понятия не имею, как это сделать.Есть идеи?
ОБНОВЛЕНИЕ: Я провел семантический тест.Вот код, который я использовал:
string ldapFormatted = string.Format("LDAP://CN={0}, OU={1}, OU={2}, DC={3}, DC={4}", cn, group, ou, domain1, domain2);
var ldapHardCoded = @"LDAP://CN=Jeremy Stafford, OU=IT, OU=QGT, DC=QGT, DC=Local";
string message;
if (ldapFormatted.Equals(ldapHardCoded))
{
message = "They're the same value\n";
}
else
{
message = "Strings are not the same value\n";
}
if (ldapFormatted.GetType() == ldapHardCoded.GetType())
{
message += "They are the same type";
}
else
{
message += "They are not the same type";
}
message += "\n\n" + ldapFormatted + "\n" + ldapHardCoded;
MessageBox.Show(message);
И вот результат: