2009-03-09 19 views
1

Kullanıcı adı ve etki alanı temel alınarak bir kullanıcının tam adını alan bir işlev var. Bu işlev, kimliğine bürünmemiş bir kullanıcının altında ASP.NET iş parçacığında çalışır. Uzak bir AD dalında Dizin arama aracını kullandığımda, özellik yerine SID numarasını aldığımı sanıyorum (farklı bir kutuda gerçekleştiğini doğrulayamıyor).Active Directory aramada geç bağlama sorunlarını nasıl giderebilirim

public string GetUserFullName(string userName, string domainName) 
{ 
    DirectoryEntry rootEntry = new DirectoryEntry("GC://dc=company,dc=net"); 
    string filter = string.Format("(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(userPrincipalName={0}@{1}.company.net))", userName, domainName); 
    DirectorySearcher searcher = new DirectorySearcher(rootEntry, filter, new string[] { "displayName" }); 
    rootEntry.AuthenticationType = AuthenticationTypes.Secure; 
    searcher.PageSize = 1000; 
    searcher.ServerTimeLimit = new TimeSpan(0, 10, 0); 
    searcher.ReferralChasing = ReferralChasingOption.All; 
    searcher.Asynchronous = false; 

    SearchResult result = searcher.FindOne(); 
    if (result != null) 
    { 
     return (string) result.Properties["displayName"][0]; 
    } 
    else 
    { 
     throw new Exception("Active Directory could not resolve your user name"); 
    } 

} 

cevap

3

.NET framework'ün hangi sürümü çalışıyorsunuz? AD maddeleri, .NET 3.5'te oldukça kapsamlı bir şekilde yenilenmiştir ve Kullanıcı ve gruplar ve bu gibi şeyler için güçlü bir şekilde yazılmış yapılar sunar.

Arkadaşım Joe Kaplan ve MSDN'de Ethan Wilansky tarafından yazılan "Managing Directory Security Principals in the .NET Framework 3.5" adlı makaleye göz atın. Gerçekten mükemmel şeyler.

Her şeyden önce, güçlü bir şekilde yazılan UserPrincipal adlı bir sınıf alırsınız. tüm temel özellikler, nesnenizdeki özelliklerdir. Gerçekten çok yararlı.

İkincisi, PrincipalSearcher kullanarak güzel bir "sorgu-by-örneğin" yöntemini almak - Joe ve Ethan'ın makalesinden bu örnekleri görmek:

// create a principal object representation to describe 
// what will be searched 
UserPrincipal user = new UserPrincipal(adPrincipalContext); 

// define the properties of the search (this can use wildcards) 
user.Enabled = false; 
user.Name = "user*"; 

// create a principal searcher for running a search operation 
PrincipalSearcher pS = new PrincipalSearcher(); 

// assign the query filter property for the principal object 
// you created 
// you can also pass the user principal in the 
// PrincipalSearcher constructor 
pS.QueryFilter = user; 

// run the query 
PrincipalSearchResult<Principal> results = pS.FindAll(); 

Console.WriteLine("Disabled accounts starting with a name of 'user':"); 
foreach (Principal result in results) 
{ 
    Console.WriteLine("name: {0}", result.Name); 
} 

hiç bir şans varsa, almaya çalışın. AD eşyalarınız için NET 3.5! Benim durumumda { "displayName"} içinde -

Marc

+0

NET 2.0. Bunu işaretlediğiniz için teşekkürler! Adrian –

0

Ben kullanışlı bir yardımcı kütüphaneye AD'yi sarılmış ettik ve her zaman bu yöntemi kullandık:

/// <summary> 
    /// Returns AD information for a specified userID. 
    /// </summary> 
    /// <param name="ntID"></param> 
    /// <returns></returns> 
    public ADUser GetUser(string ntID) 
    {   
     DirectorySearcher search = new DirectorySearcher();   

     search.Filter = String.Format("(cn={0})", ntID); 

     search.PropertiesToLoad.Add("mail"); 
     search.PropertiesToLoad.Add("givenName"); 
     search.PropertiesToLoad.Add("sn"); 
     search.PropertiesToLoad.Add("displayName"); 
     search.PropertiesToLoad.Add("userPrincipalName"); 
     search.PropertiesToLoad.Add("cn"); 

     SearchResult result = search.FindOne(); 

     return new ADUser(result); 
    } 

ADUser güçlü Yazılan özelliklerine bir SearchResult eşler özel bir sınıftır.

Sorununuzun ne olduğundan emin değilim, ancak bu her zaman benim için çalıştı.

DÜZENLEME: kodumuzu karşılaştırılması, sana özelliği önceden yüklemek için arama söylemiyorlar bkz ... Muhtemelen senin sorunun.

+0

Merhaba sineklik, DirectorySearcher yapıcı dizi yüklenemedi özellikleri vardır. ADUser sınıfını kullanmayı deneyeceğim. Teşekkürler, –

+0

ADUser, kullanıcılarla biraz daha akılcı olmanızı sağlayan bir derstir. – FlySwat

İlgili konular