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
///
/// This function is used to set user password
///
///
///
///
///
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
///
/// This function is used to add user to active directory
///
/// Active Directory
///
///
///
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!!!
Sam HobbsPosted Apr 15, 2011, 6:14 AM
I don't know anything about Active Directory. My guess is that someone that is familiar with it will need to ask you some more questions, but I will leave that for them to do.
shrikant kesharwaniPosted Apr 15, 2011, 5:45 AM
it is taking time in invoke method.
Mahesh ChandPosted Apr 12, 2011, 10:31 PM
Sam HobbsPosted Apr 12, 2011, 10:12 PM
I see you are logging debug messages using _logger.Debug; do that to help determine where the time is going. Just add a time to the messages so you can see what time that each message is done. Do that to determine whgat is taking time.