Technorati Tag: ,

Come avrete notato, ultimamente sto dedicando parecchio del mio tempo al Framework 3.0/3.5 ed in particolar modo alla sezione legata a Linq, per lo meno ci sto provando.
Oltre all' ormai stranoto LinqToSql esiste un progetto OpenSource che potete trovare su CodePlex a questo che si chiama LinqToLdap. Già dal nome è tutto un programma!!

Ebbene si' grazie a questa versione di Linq, o meglio a questo componente che a sua volta sfrutta la potenza di Linq, è possibile fare delle bellissime query in ActiveDirectory e ricevere una bella IList<> di entità note.

Installazione.

Per poter lavorare con LinqToLdap, esclusivamente in un progetto targato NET 3.5, basta scaricare da CodePlex la dll denominata BdsSoft.DirectoryServices.Linq.dll ed aggiungerla come reference al nostro attuale progetto visual studio.
Fatto cio', cosa che consiglio vivamente, potete usufruire delle mappature fornite dall' ActiveX targato Microsoft e quindi gratuito, che si chiama ActiveDs.dll, che qui sotto io ho <trasformato> in Interop con pochi semplici passaggi:

Nuova immagine

Come potete notare dalla figura, questo ActiveX espone parecchie interfacce che rappresentano tutti gli oggetti presenti in ActiveDirectory, con il loro DataType adattato per il NET Framework. Una figata!! Nella prossima figura un dettaglio dell' interfaccia IADUser che rappresenta proprio un utente.

123
Ebbene si, sono proprio le proprietà esposte da Ldap, ma con i DataType compatibili NET, quindi: object, int, string, double ... Inoltre, un bel metodo SetPassword ... e non è l' unico!!

Creazione della Entity e Persistenza

Una volta stabilito cosa ci serve, possiamo creare una Entity con i campi che vogliamo visualizzare da ActiveDirectory. La strada piu' facile è quella di creare delle proprietà che puntano con un particolare attributo a quelle esposte dall' interfaccia di ActvieDs come nel codice sotto:

1 [DirectoryAttribute("AccountExpirationDate", DirectoryAttributeType.ActiveDs)] 2 public DateTime AccountExpirationDate{get;set;} 3 [DirectoryAttribute("Department", DirectoryAttributeType.ActiveDs)] 4 public string Department{get;set;} 5

Infine possiamo eseguire adesso delle query in classico stile LinQ

static DirectoryEntry ROOT = new DirectoryEntry("LDAP://DOSPB01"); public static void GetUsers() { var users = new DirectorySource<UserAD>(ROOT, SearchScope.Subtree); var res1 = from usr in users select usr; foreach (var w in res1) { Console.WriteLine(string.Format("Utente: {0} {1}", w.FullName, w.Department)); } }