object ret = usr.Invoke("SetPassword", userPassword); // is taking around 1.5 minutes to complete...

Apr 12 2011 12:29 PM
 

Hi All,
We are able to create new user successfully on the active directory but the SetPassword method is taking around 1.5 minutes to complete the process. Below is the code of the snippet of SetPassword. Is there any better approach to set the password of new user?
    #region SetPassword
    /// <summary>
    /// This function is used to set user password
    /// </summary>
    /// <param name="path"></param>
    /// <param name="userPassword"></param>
    /// <remarks>
   
  /// </remarks>
    internal static void SetPassword(string path, string userPassword)
    {
        if (_logger.IsDebugEnabled)
            _logger.Debug("ADHelper.cs : Enter SetPassword");

        try
        {
            using (DirectoryEntry usr = GetDirectoryEntry(path))
            {
                object ret = usr.Invoke("SetPassword", userPassword);
                usr.CommitChanges();
                usr.Close();
            }

            if (_logger.IsDebugEnabled)
                _logger.Debug("ADHelper.cs : Exit SetPassword");
        }
        catch (Exception ex)
        {
            if (_logger.IsErrorEnabled)
                _logger.Error("ADHelper.cs : Exception occurred in SetPassword. Message: ", ex);
           
            throw ex;
        }
    }

    #endregion
Here is our production environment type.
•    IIS 7
•    ASP.NET 3.5 (C#)
•    Active Directory
•    Windows Server 2008 R2


Add user snippet
#region AddUser

    /// <summary>
    /// This function is used to add user to active directory
    /// </summary>
    /// <param name="adPath">Active Directory</param>
    /// <returns>directory entry object</returns>
    /// <remarks>
    /// </remarks>
    public static void AddUser(ADUser adUser)
    {
        if (_logger.IsDebugEnabled)
            _logger.Debug("ADHelper.cs : Enter AddUser");

        // Local variables
        DirectoryEntry oDE = null;
        DirectoryEntry oDENewUser = null;
        DirectoryEntries oDEs = null;

        try
        {
            oDE = GetDirectoryEntry(GetADPath(Constants.EnvironmentType.PROD, adUser.UserType));

            // 1. Create user account
            oDEs = oDE.Children;
            oDENewUser = oDEs.Add(string.Format("{0}=", Constants.ADAttributes.CN) + adUser.UserName, "user");

            // 2. Set properties
            SetProperty(oDENewUser, Constants.ADAttributes.givenName, adUser.FirstName);
            SetProperty(oDENewUser, Constants.ADAttributes.sn, adUser.LastName);
            SetProperty(oDENewUser, Constants.ADAttributes.mail, adUser.Email);
            SetProperty(oDENewUser, Constants.ADAttributes.sAMAccountName, adUser.UserName);
            oDENewUser.CommitChanges();

            // 3. Set password
            SetPassword(oDENewUser.Path, adUser.Password);

            // 4. Enable account           
            EnableAccount(oDENewUser);

            oDENewUser.Close();
            oDE.Close();

            if (_logger.IsDebugEnabled)
                _logger.Debug("ADHelper.cs : Exit AddUser");
        }
        catch (Exception ex)
        {
            if (_logger.IsErrorEnabled)
                _logger.Error("ADHelper.cs : Exception occurred in AddUser. Message: ", ex);

            throw ex;
        }
        finally
        {
            if (oDENewUser != null)
            {
                oDENewUser.Dispose();
                oDENewUser = null;
            }

            if (oDEs != null)
            {
                oDEs = null;
            }

            if (oDE != null)
            {
                oDE.Dispose();
                oDE = null;
            }
        }
    }

    #endregion

THANKS IN ADVANCE!!!

 


Answers (4)