2012-03-26 54 views
0

我使用System.DirectoryServices中的类来更改AD中的密码。代码是这样的:为什么在不同的计算机上使用相同的c#代码在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中更改密码花费不同的时间?我花了很多时间来处理这个问题,但仍然没有结果。有人可以告诉我吗?非常感谢你!!!!!

+1

我的第一个想法是:不同机器之间的网络拓扑有什么不同?在域控制器上更改AD密码(例如)可能需要的时间比在远离主机的客户端计算机上执行更短的时间。 – ravuya 2012-03-26 05:06:20

+0

部分计算机与AD处于同一网段,其他计算机不在。但是如果电脑可以快速更换AD口令,它可以快速更换不同网段中的任何AD。所以我想也许它不是关于网络拓扑,而是关于计算机上的系统环境。就像其中一台计算机上的某些服务一样,但其他服务却没有。但我找不到任何明显的差异,使一些电脑运行速度快于其他电脑。 @ravuya – Prince 2012-03-26 06:25:39

回答

1

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

+0

我使用的电脑并不忙,我认为硬件问题不会造成如此大的不同速度。我想也许是关于系统环境。但我仍然无法找出问题所在。 @JustinPihony – Prince 2012-03-26 06:34:07

0

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

+0

它不能ping通AD。一些网络设备拦截该操作。 – Prince 2012-03-26 06:38:23

+0

然后通过询问AD Guid并响应时间来'平'AD。 – Seph 2012-03-26 07:18:46

0

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

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

0

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

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

相关问题