Я пытаюсь получить следующий код для работы, проблема есть, иногда это происходит, иногда это не так. , когда он терпит неудачу, он дает ошибку 0x800704F1 «система не может связаться с контроллером домена для обслуживания запроса на аутентификацию» Я бы сказал, что около 90% времени он терпит неудачу. Я попытался дать ему статический DC, добавив его за контекст, который, к сожалению, не помог. На пользователя admin он работает всегда .. однако я верю, что пользователи должны иметь возможность изменять свой собственный пароль. Ошибка запускается пользователем. Изменить строку пароляC# Изменить пароль AD Directoryservices
Надеюсь, что у кого-то еще есть яркая идея.
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.Current)
{
try
{
user.ChangePassword(txt_old.Text, txt_new.Text);
user.Save();
}
catch(Exception p)
{
if (p.HResult.Equals("0x800708C5"))//Not secure enough according to password policy
{
MessageBox.Show("Volgens het systeem is uw nieuwe wachtwoord niet veilig genoeg, voldoet het aan alle eisen?", "Niet gelukt", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (p.HResult.Equals("0x80070056")) //Wrong current password
{
MessageBox.Show("U heeft een verkeerd huidig wachtwoord ingevult, probeer het nogmaals", "Verkeerd wachtwoord", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (p.InnerException.ToString().Contains("0x80070775")) //Temporarly locked out.
{
MessageBox.Show("Uw account is tijdelijk vergrendeld door te veel pogingen tot in te loggen met een foutief wachtwoord. Probeer het over 15minuten nogmaals of neem contact op met de helpdesk.", "vergrendeld.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else
{
MessageBox.Show(System.Security.Principal.WindowsIdentity.GetCurrent().Name + Environment.NewLine + p.HResult + Environment.NewLine + p.Message);
return;
}
}
}
}
Спасибо, что с помощью действующего UPN он сработал. – Kage