Почему использование одного и того же кода C # для смены пароля в AD на другом компьютере приводит к разной скорости? - PullRequest
0 голосов
/ 26 марта 2012

Я использовал класс в System.DirectoryServices, чтобы изменить пароль в AD. Код вроде этого:

    DirectoryEntry _directoryEntry = new DirectoryEntry(ldapPath, user, pwd, AuthenticationTypes.Secure);
    public bool ChangePassword(string userPath, string newPassword)
    {
        try
        {
            if (userPath != null && _directoryEntry != null)
            {
                _directoryEntry.Path = userPath;
                //Set the password
                _directoryEntry.Invoke("SetPassword", new object[] { newPassword });
                _directoryEntry.CommitChanges();
                return true;
            }
        }
        catch (Exception ex)
        {
            //Invalid Login or the domain controller is not contactable
            throw ex;
        }
        finally
        {
            _directoryEntry.Close();
            _directoryEntry = null;
        }
        return false;
    }

Я выполнил эти коды на другом компьютере. Время, потраченное от нескольких мс до нескольких секунд.

Почему один и тот же код, выполняемый в разных средах для изменения пароля в AD, тратит разное время? Я потратил много времени на решение этой проблемы, но до сих пор не получил результата. Кто-нибудь может сказать мне? Большое спасибо !!!!!

Ответы [ 4 ]

1 голос
/ 26 марта 2012

Похоже, это простая проблема среды. Возможно, сеть находится дальше или просто в целом медленнее, или это может быть связано с тем, что процессор работает медленнее, или практически из-за различий в окружающей среде. Я бы сравнил некоторые ключевые характеристики оборудования. Вы также можете убедиться, что на каждом компьютере запущено очень мало процессов, чтобы убедиться, что это не конфликтует с другим процессом.

0 голосов
/ 27 июля 2012

У меня была эта проблема. Скорее всего, потому, что на одном компьютере вы запрашиваете главный контроллер домена напрямую, а на другом вы запрашиваете контроллер домена только для чтения, который затем должен запросить главный контроллер домена. Зачем? Без понятия. Я просто знаю, что когда я использовал Wireshark для прослушивания трафика моих запросов AD, он всегда работал быстро, когда он общался с главным контроллером домена, и медленно все остальное время. Поэтому я обычно включаю нужный контроллер в конструктор DirectoryEntry (т. Е. LDAP://ip-of-controller/cn=whaerver,ou=2whafsal,dc=etc).

Вы также можете открыть командную строку и запустить echo %logonserver%, чтобы проверить, какой контроллер домена будет использоваться по умолчанию на вашем компьютере (я думаю).

0 голосов
/ 26 марта 2012

Вы должны действительно получить трассировку сети и посмотреть, что происходит.Здесь много движущихся частей.

С другой стороны, способ размещения этого кода немного странный.Почему вы создаете DirectoryEntry, а затем изменяете свойство Path?

0 голосов
/ 26 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...