Основной объект должен сохраняться до того, как этот метод можно назвать С#

59
8

Я пытаюсь получить дополнительную информацию о пользователе от AD.

  List<string> allUsers = new List<string>();
PrincipalContext ctx2 = new PrincipalContext(ContextType.Domain, "FUNDACION", valor);
UserPrincipal qbeUser2 = new UserPrincipal(ctx2);

qbeUser2.Enabled = true; // activo para autenticacion

PrincipalSearcher srch2 = new PrincipalSearcher(qbeUser2);
srch2.QueryFilter = qbeUser2;

DirectoryEntry dirEntry = (qbeUser2.GetUnderlyingObject() as DirectoryEntry);

Я получаю исключение в этой строке:

DirectoryEntry dirEntry = (qbeUser2.GetUnderlyingObject() как DirectoryEntry);

Исключение типа "System.InvalidOperationException" произошло в System.DirectoryServices.AccountManagement.dll, но не было обработано в коде пользователя. Дополнительная информация: объект Principal должен быть сохранен до вызова этого метода.

спросил(а) 2015-05-25T20:16:00+03:00 5 лет, 5 месяцев назад
1
Решение
91

У вас есть доступ к исходному коду класса UserPrincipal и, в частности, к его GetUnderlyingObject()?

Похоже, что метод выбрасывает исключение. Это может происходить по контракту или случайно.

Если ожидается, что это исключение ("по контракту"), вы должны обернуть этот вызов метода внутри блока try/catch и обработать исключение соответственно:

try {
DirectoryEntry dirEntry = (qbeUser2.GetUnderlyingObject() as DirectoryEntry);
} catch (InvalidOperationException e) {
// handle expected exception accordingly
}

В противном случае вы должны убедиться, что объект сохраняется до вызова метода, как указано в сообщении об исключении (docs здесь):

qbeUser2.Save();
DirectoryEntry dirEntry = (qbeUser2.GetUnderlyingObject() as DirectoryEntry);

ответил(а) 2015-05-25T20:23:00+03:00 5 лет, 5 месяцев назад
42

Вам нужно выполнить qbeUser2.Save(), прежде чем вы сможете позвонить в GetUnderlyingObject()

ответил(а) 2018-04-05T13:32:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема