【问题标题】:why does using the same c# code to change password in AD in different computer make different speed?为什么在不同的计算机上使用相同的c#代码更改AD中的密码会产生不同的速度?
【发布时间】:2012-03-26 05:02:15
【问题描述】:

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

【问题讨论】:

  • 我的第一个想法是:不同机器之间的网络拓扑有区别吗?更改域控制器(例如)上的 AD 密码可能比在远离主机的客户端计算机上执行它所花费的时间要少得多。
  • 有的电脑和AD在同一个网段,有的不在。但是如果电脑能快速修改AD密码,它就可以快速修改不同网段的任意AD。所以我认为这可能与网络拓扑无关,而与计算机上的系统环境有关。就像其中一台计算机上的某些服务已启动,但其他服务未启动。但是我找不到任何明显的差异来使某些计算机比其他计算机运行得更快。 @ravuya

标签: c# asp.net .net active-directory


【解决方案1】:

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

【讨论】:

  • 我使用的电脑不忙,我认为硬件问题不会造成如此大的不同速度。我认为可能与系统环境有关。但我仍然无法找出问题所在。 @JustinPihony
【解决方案2】:

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

【讨论】:

  • 它无法 ping AD。部分网络设备拦截操作。
  • 然后通过仅询问 AD Guid 并计时响应来“ping”AD。
【解决方案3】:

您应该真正获得网络跟踪,看看发生了什么。这里有很多活动部件。

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2021-04-17
      相关资源
      最近更新 更多