16 Ekim 2017 Pazartesi

PrincipalContext Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.DirectoryServices.AccountManagement.PrincipalContext;
Açıklaması şöyle
This class encapsulates the server or domain against which all operations are performed
Bu sınıf Active Directory veya kendi makinemize bağlantı açmak için kullanılır. Dolayısıyla işimiz bitince kapatmamız gerekir. Bunun için using içinde kullanılır.

Constructor - contextType 
Örnek
Kendi domain'imize bağlanmak için şöyle yaparız.
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{...}
Örnek
Şöyle yaparız.
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine)) {...}
Constructor - Domain + Domain Name
Örnek
İsmini bildiğimiz bir domain'e şöyle bağlanırız.
using(PrincipalContext pc =new PrincipalContext(ContextType.Domain, "YOURDOMAIN"))
{...}
Bu metod exception atabilir. Şöyle yaparız.
PrincipalContext pc = null;
try
{
  pc = new PrincipalContext(ContextType.Domain, domain);

  var success = pc.ValidateCredentials(username, password);
  return success;

}
catch (PrincipalServerDownException ex)
{
  return false;
}
finally
{
  if (pc != null)
  {
    pc.Dispose();
  }
}
Constructor  - contextTyoe + name + container
Kendi domain'imize daha küçük bir kapsam kullanarak şöyle yaparız.


// set up domain context - limit to the OU you're interested in
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, null, 
                                        "OU=YourOU,DC=YourCompany,DC=Com"))
{...}
Constructor - contextType + name + container + options
İki farklı domain'e bağlanmak için şöyle yaparız.
PrincipalContext pc1 = new PrincipalContext(ContextType.Domain, "domain1.company.com",
 "DC=domain1,DC=company,DC=com", ContextOptions.Negotiate);
PrincipalContext pc2 = new PrincipalContext(ContextType.Domain, "domain2.company.com",
 "DC=domain2,DC=company,DC=com", ContextOptions.Negotiate);
ValidateCredentials metodu
Açıklaması şöyle. Ancak aynı PrincipalContext nesnesinin ValidateCredentials metodunun aynı anda bir çok thread tarafından kullanılması yanlış diyenler de var. Hangisi doğru bilmiyorum
You create a single PrincipalContext object for the directory store in question and reuse that object instance for each call to ValidateCredentials. ThePrincipalContext can reuse the connection to the directory, which results in good performance and scalability. And calls to ValidateCredentials are thread-safe, so your instance can be used across threads for this operation. It's important to note that the credentials used to create the PrincipalContext are not changed by calls to ValidateCredentials—the context and method call maintain separate connections.
Bağlantı açtıktan sonra kullanıcıyı doğrulamak için kullanırız.
// validate the credentials
bool isValid = pc.ValidateCredentials("myuser", "mypassword");

Hiç yorum yok:

Yorum Gönder