У нас есть приложение winforms, которое получает группы из активного каталога. Теперь все работало нормально, пока мы не заменили старый контроллер домена на новый.
С тех пор наше приложение генерирует исключение, когда вызывается метод UserPrincipal.GetGroups () . Исключение выдается, потому что оно пытается подключиться к старому DC.
Исключительное сообщение переведено:
Сервер не работает surottdc04.TOSOT.CH
Кто-нибудь имеет представление, кэшируется ли старая dc-информация где-нибудь или откуда приложение получает старую информацию?
На следующем снимке экрана вы можете увидеть фрагмент кода, в котором выдается исключение:
Как вы можете видеть, в окне просмотра есть правильный новый DC surottdc06 , это было предположительно взято из контекста текущего зарегистрированного пользователя. Но в Исключении все еще есть старый DC surottdc04 , почему?
UPDATE
Итак, мы выяснили, что когда мы передаем контекст методу в качестве параметра, то он работает, но без контекста метод пытается подключиться к старому DC.
Это одно из возможных решений, но вопрос все еще в том, где метод получает старую информацию о DC и пытается подключиться туда, когда метод вызывается без параметров?
public void GetGroups()
{
var sid = WindowsIdentity.GetCurrent().User.Value;
using (var context = new PrincipalContext(ContextType.Domain, "tosot.ch"))
{
using (var userPrinciple = UserPrincipal.FindByIdentity(context, sid))
{
/*
* this works, we just pass the context which we've used to
* create the UserPrincipal instance again to fetch the groups
*/
var ret = userPrinciple.GetGroups(context);
/*
* this works NOT: when calling without context argument,
* it seems, the context used is not the same
* as the userPrinciple instance is linked to.
* Instead it uses a selfmade context with an yet exsting,
* but currently not online domain controller - why that??
* (this 'old' domain controller is currently not running,
* but it's yet not removed from the domain ...)
*/
ret = userPrinciple.GetGroups();
}
}
}