为什么在不同的计算机上使用相同的c#代码在AD中更改密码会产生不同的速度

本文关键字:密码 速度 计算机 代码 为什么 AD | 更新日期: 2023-09-27 18:28:55

我使用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中的密码花费了不同的时间?我花了很多时间来处理这个问题,但仍然没有结果。有人能告诉我吗?非常感谢!!!!!

为什么在不同的计算机上使用相同的c#代码在AD中更改密码会产生不同的速度

这听起来像是一个简单的环境问题。也许网络更远,或者只是总体上更慢,也可能是处理器更慢,或者只是任何数量的环境差异。我会比较一些关键的硬件规格。您还可以确保每台机器上运行的进程非常少,以验证它可能与另一个进程没有冲突。

一个简单的ping报告应该可以帮助您排除任何与网络相关的问题。只需从不同的测试机器上ping您的AD,并观察响应时间。

你真的应该得到一个网络跟踪,看看发生了什么。这里有很多移动部件。

除此之外,这个代码的布局方式有点奇怪。为什么要创建DirectoryEntry,然后更改Path属性?

我遇到了这个问题。这可能是因为在一台计算机上,您直接查询主域控制器,而在另一台计算机中,您查询的是只读域控制器,然后必须查询主域控制。为什么?不知道。我只知道,当我使用Wireshark监听我的AD查询流量时,它在与主域控制器通话时总是很快,而在其他时间都很慢。因此,我通常在DirectoryEntry构造函数(即LDAP://ip-of-controller/cn=whaerver,ou=2whafsal,dc=etc)中包含我想要的控制器。

您也可以打开命令提示符并运行echo %logonserver%来检查您的计算机将默认为哪个域控制器(我认为)。