2009-09-06 4 views
1

ajouter plus d'informations sur la demande @ serialhobbyist

Salut à tous. nous sommes (= moi et mes collègues) en utilisant PrincipalContext de System.DirectoryServices.AccountManagement pour récupérer des informations d'authentification (assurez-vous qu'un utilisateur appartient à un groupe, etc.).

Important: notre client est un service s'exécutant en tant que LocalSystem. cela ne se produit pas lorsque nous courons dans un processus normal ou lorsque l'on change le service à exécuter en tant qu'utilisateur spécifique
problème d'authentification Active Directory après Reconnect - C#

est ici un exemple de code:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain)) 
{ 
    Principal p = Principal.FindByIdentity(ctx,IdentityType.Sid, sid); 
    ... 
} 

normalement tout fonctionne bien (obtenir des réponses). fois en quelques heures (le déclencheur est clair), ou après une déconnexion du réseau et reconnecter, (lorsque nos clients AD se déconnecte, via déconnexion de câble réseau ou désactiver l'adaptateur VM, etc.) que nous obtenons cette exception:

System.Runtime.InteropServices.COMException (0x80072020): An operations error occurred. 

at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 
at System.DirectoryServices.DirectoryEntry.Bind() 
at System.DirectoryServices.DirectoryEntry.get_AdsObject() 
at System.DirectoryServices.PropertyValueCollection.PopulateList() 
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) 
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName) 
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() 
at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() 
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() 
at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx() 
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable``1 identityType, String identityValue, DateTime refDate) 
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) 
at System.DirectoryServices.AccountManagement.Principal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) 

cherché à l'exception (0x80072020), je le vois se traduit par LDAP_OPERATIONS_ERROR (en fait utilisé comme exemple de traduction de valeur de code here :)) nous avons inspecté le trafic en utilisant Wireshark et l'exception est levée avant toute requête LDAP est envoyée.
après le redémarrage de notre processus tout est de retour à la normale (peut valider avec succès, sans exceptions). quelqu'un peut-il faire la lumière sur le sujet? des idées comment atteindre l'équivalent les nettoyages effectués sur la fin du processus? merci! Mise à jour: nous avons trouvé un moyen de contourner cela, fournira la réponse ci-dessous. Cependant, nous préférons trouver une solution plus simple.

+1

Pouvez-vous clarifier un peu, par ex. combien de machines sont impliquées; que voulez-vous dire par «mon serveur» - parlez-vous du contrôleur de domaine ou de la machine cliente; que voulez-vous dire par «je déconnecte» - débranchez, désactivez le réseautage, déposez le dial-up,? Il serait probablement aussi utile de voir le code qui est exécuté avant/après la déconnexion. – serialhobbyist

+0

sûr, en éditant dans une minute. Je m'excuse pour le retard, était en vacances en Turquie. hautement recommandé. –

Répondre

0

Nous avons trouvé une solution de contournement here on msdn, en interrogeant LDAP directement à l'aide des objets DirectoryEntry + DirectorySearcher. cela nécessite une analyse plutôt désagréable (en considérant cela comme notre spécialité principale) au lieu de travailler via des objets existants. en utilisant cette approche cependant la condition décrite ci-dessus n'est pas rencontrée. comme mentionné ci-dessus, nous apprécierions une meilleure solution en utilisant les objets existants.

Questions connexes