DirectoryEntry CommitChanges возвращает Исключение было сгенерировано целью вызова на сервере 2019 - PullRequest
0 голосов
/ 17 января 2020

Я пытался создать сброс пароля и функции создания пользователя для Active Directory. На моем P C с приведенным ниже кодом работает нормально, без ошибок. Но когда я опубликовал sh на сервере, я получил ошибку: Исключение было выдано целью вызова .

ADResult hasil = new ADResult();
DirectoryEntry de = new DirectoryEntry(_path, _adminID, _adminPassword, AuthenticationTypes.Secure);

DirectorySearcher ds = new DirectorySearcher(de);
string query = string.Format("(&(objectCategory=person)(sAMAccountName={0}))", user.userID);

ds.Filter = query;
ds.Sort.PropertyName = "CN";
ds.SearchScope = SearchScope.Subtree;
ds.CacheResults = false;

try
{
 SearchResult sr = ds.FindOne();
 if (sr == null)
 {
  hasil.errorCode = -1;
  hasil.result = "User name not found in this domain.";
 }
 else
 {
  DirectoryEntry userCredentials = sr.GetDirectoryEntry();
  userCredentials.Invoke("SetPassword", new Object[] { user.password });
  userCredentials.CommitChanges();
  userCredentials.Close();
  hasil.errorCode = 0;
  hasil.result = "Password for " + user.userID + " changed successfully.";
 }
}
catch (Exception e)
{
 hasil.errorCode = -1;
 hasil.result = e.Message + "<br/>" + e.StackTrace + "<br/>" + e.Source;
}
return hasil;

Есть ли какие-то настройки / настройки, которые я пропустил на стороне сервера?

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Я изменил свой код, используя

UserPrincipal

вместо

DirectoryEntry

и это работает отлично. Я использую этот код:

PrincipalContext PrincipalContext4 = new PrincipalContext(ContextType.Domain, "full_domain_name.com", "OU=User_OU,DC=domain_name,DC=co,DC=id", _adminID, _adminPassword);
UserPrincipal UserPrincipal1 = new UserPrincipal(PrincipalContext4, user.userID, user.password, true);

//User Logon Name
UserPrincipal1.UserPrincipalName = user.userID;
UserPrincipal1.Name = user.firstName + " " + user.lastName;
UserPrincipal1.GivenName = user.firstName;
UserPrincipal1.Surname = user.lastName;
UserPrincipal1.DisplayName = user.firstName + " " + user.lastName;
UserPrincipal1.Enabled = true;
UserPrincipal1.Save();

Я до сих пор не знаю, почему я использую DirectoryEntry не работает на windows сервере 2019

0 голосов
/ 17 января 2020

Это не точное сообщение об ошибке, настоящая ошибка должна быть перенесена. Вы можете писать регистраторы или журналы событий после строк, которые, по вашему мнению, могут быть виновниками. Вы можете проверить журнал событий на этом сервере, если сможете найти сложную трассировку стека. Вы можете проверить, что у пользователя есть права администратора для этого сервера для поиска в AD.

...