为什么在不同的计算机上使用相同的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中的密码花费了不同的时间?我花了很多时间来处理这个问题,但仍然没有结果。有人能告诉我吗?非常感谢!!!!!
这听起来像是一个简单的环境问题。也许网络更远,或者只是总体上更慢,也可能是处理器更慢,或者只是任何数量的环境差异。我会比较一些关键的硬件规格。您还可以确保每台机器上运行的进程非常少,以验证它可能与另一个进程没有冲突。
一个简单的ping报告应该可以帮助您排除任何与网络相关的问题。只需从不同的测试机器上ping您的AD,并观察响应时间。
你真的应该得到一个网络跟踪,看看发生了什么。这里有很多移动部件。
除此之外,这个代码的布局方式有点奇怪。为什么要创建DirectoryEntry
,然后更改Path
属性?
我遇到了这个问题。这可能是因为在一台计算机上,您直接查询主域控制器,而在另一台计算机中,您查询的是只读域控制器,然后必须查询主域控制。为什么?不知道。我只知道,当我使用Wireshark监听我的AD查询流量时,它在与主域控制器通话时总是很快,而在其他时间都很慢。因此,我通常在DirectoryEntry构造函数(即LDAP://ip-of-controller/cn=whaerver,ou=2whafsal,dc=etc
)中包含我想要的控制器。
您也可以打开命令提示符并运行echo %logonserver%
来检查您的计算机将默认为哪个域控制器(我认为)。