15 messaggi dal 19 luglio 2006
Buongiorno, ho un problema con un'applicazione asp.net 2 che sto sviluppando per la intranet della mia azienda dove è presente:
un dominio windows 2003
IIS 6
.Net Framework 2

Vorrei recuperare da Active Directory e visualizzare nella pagina "prova.aspx" 3 proprietà (mail, department e company) relative al domain user che si collega alla pagina stessa. Non riesco a capire cosa sbaglio (anche perchè caricando nel browser la pagina in questione non ho alcun messaggio di errore; il sistema mi restituisce scemplicemente una pagina vuota).

Nel "web.config" dell'applicazione ho aggiunto:
name space "System.DirectoryServices"
authentication mode="Windows"
identity impersonate="true"

In "prova.aspx" sono presenti 3 oggetti label (lbl1, lbl2 e lbl3) per visualizzare le proprietà.

In "prova.aspx.vb" ho scritto il seguente codice:

Partial Class prova
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim utente As String
Dim eMail As string
Dim eLocation As String
Dim eComp As String
Dim path As String
Dim localUsername As String
Dim localPassword As String
Dim myRic As DirectorySearcher
utente = User.Identity.Name.ToString
path = "LDAP://mioserver/DC=pr,DC=intra,DC=cciaa,DC=net"
localUsername = "amministratore"
localPassword = "password"
myRic = New DirectorySearcher(New DirectoryEntry(path, localUsername, localPassword))
myRic.Filter = "(&(objectcategory=person)(objectclass=user)(SAMAccountName="+utente+"))"
myRic.PropertiesToLoad.Add("mail")
myRic.PropertiesToLoad.Add("department")
myRic.PropertiesToLoad.Add("company")
Dim results As SearchResultCollection
results = myRic.FindAll()
Dim result As SearchResult
For Each result In results
eMail = result.GetDirectoryEntry.Properties.Item("mail").Value
eLocation = result.GetDirectoryEntry.Properties.Item("department").Value
eComp = result.GetDirectoryEntry.Properties.Item("company").Value
lbl1.text = eMail.toString
lbl2.text = eLocation.toString
lbl3.text = eComp.toString
Next
End Sub
End Class

Grazie per il vostro aiuto.
Alessandro
Modificato da cpr0074 il 16 novembre 2009 18.51 -
Modificato da cpr0074 il 16 novembre 2009 22.01 -
72 messaggi dal 04 agosto 2008
Ciao,
in linea di principio il codice mi sembra corretto; dovresti capire dove sia l'errore: in debug o aggiungendo qualche label di controllo dovresti verificare quale istruzione non ti sta fornendo quello che ti aspetti...
Io ho provato, passando manualmente il nome dell'utente, e funziona; hai verificato se la variabile utente viene valorizzata correttamente? se il metodo FindAll ti restituisce qualche valore?
Ciao
Salvo
15 messaggi dal 19 luglio 2006
giuffrixyz ha scritto:
Ciao,
in linea di principio il codice mi sembra corretto; dovresti capire dove sia l'errore: in debug o aggiungendo qualche label di controllo dovresti verificare quale istruzione non ti sta fornendo quello che ti aspetti...
Io ho provato, passando manualmente il nome dell'utente, e funziona; hai verificato se la variabile utente viene valorizzata correttamente? se il metodo FindAll ti restituisce qualche valore?
Ciao
Salvo


grazie intanto per la risposta
in effetti ho verificato che riesco a collegarmi all'active directory senza problemi recuperando la user dell'utente di dominio nel formato corretto (dominio\utente) mentre il metodo FindAll non restituisce nulla (pur essendo ovviamente valorizzate le proprietà relative all'utente).
Qualche idea ?
72 messaggi dal 04 agosto 2008
La variabile 'utente' dovrebbe contenere solo il nome, senza dominio e senza backslash.
Puoi fare qualche prova usando anche gli asterischi e mettendo per ora manualmente una parte del nome dell'utente giusto per vedere se restituisce qualcosa:

utente = "a"
...
myRic.Filter = "(&(objectcategory=person)(objectclass=user)(SAMAccountName=*" + utente + "*))"

così ti restituisce tutti gli utenti che hanno la 'a' nel nome utente; a regime usare gli asterischi non sarà corretto. A tal proposito ti segnalo che quando ti servirà un solo valore potrai usare il metodo
result = myRic.FindOne()
invece che ciclare in tutti i risultati.
Salvo
15 messaggi dal 19 luglio 2006
giuffrixyz ha scritto:
La variabile 'utente' dovrebbe contenere solo il nome, senza dominio e senza backslash.
Puoi fare qualche prova usando anche gli asterischi e mettendo per ora manualmente una parte del nome dell'utente giusto per vedere se restituisce qualcosa:

utente = "a"
...
myRic.Filter = "(&(objectcategory=person)(objectclass=user)(SAMAccountName=*" + utente + "*))"

così ti restituisce tutti gli utenti che hanno la 'a' nel nome utente; a regime usare gli asterischi non sarà corretto. A tal proposito ti segnalo che quando ti servirà un solo valore potrai usare il metodo
result = myRic.FindOne()
invece che ciclare in tutti i risultati.
Salvo


è proprio come mi hai suggerito: lasciando solo il nome utente funziona tutto
moltissime grazie !!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.