2009-08-20 11 views
2

Ich arbeite an einer Active Directory Managament-Anwendung. Zusätzlich zum typischen Erstellen eines neuen Benutzers, Aktivieren/Deaktivieren eines Kontos, Zurücksetzen meines Passworts usw. verwaltet es auch Anwendungsberechtigungen für alle Client-Webanwendungen. Das Anwendungsmanagement wird von Tausenden von AD-Gruppen gehandhabt, die aus 3-Buchstaben-Codes für die Anwendung, Sektion und Site bestehen. Es gibt auch Hunderte von AD-Gruppen, die bestimmen, an welche Anwendungen und Standorte ein Koordinator Rechte vergeben kann. Alle diese Gruppen gehören wiederum zu anderen Gruppen, daher filtere ich die Gruppenliste normalerweise mit der MemberOf-Eigenschaft, um die Gruppen zu finden, denen ein Benutzer direkt angehört (oder jeder hat das Recht, alles zu tun). Ich habe den System.DirectoryServices.AccountManagment-Namespace mit der FindByIdentity-Methode an 31 Stellen in der gesamten Anwendung verwendet. Diese Methode ruft eine private Methode FindPrincipalByIdentRefHelper für die interne ADStoreCtx-Klasse auf. Eine SearchResultCollection wird erstellt, aber nicht entsorgt, so dass der Webserver typischerweise einmal oder zweimal täglich nicht genügend Arbeitsspeicher hat und alle Anwendungen auf dem Webserver nicht mehr reagieren, bis iis zurückgesetzt wird, da die von den com-Objekten verwendeten Ressourcen nicht freigegeben werden .FindByIdentity in System.DirectoryServices.AccountManagement Speicherprobleme

Es gibt Orte, an denen ich auf die zugrunde liegenden Verzeichnisobjekte zurückgreift, aber es gibt viele Orte, an denen ich die Eigenschaften des Principals verwende - das ist eine enorme Verbesserung gegenüber den esoterischen Anzeigeneigenschaftsnamen in .Net 2.0 Verzeichnisdienstcode

Ich habe Microsoft über das Problem kontaktiert und es wurde in .Net 4.0 behoben, aber sie haben derzeit keine Pläne, es in 3.5 zu beheben, es sei denn es gibt Interesse in der Gemeinschaft darüber.

Ich fand nur Informationen über sie in ein paar Plätze

die MDSN Dokumentation in der Gemeinschaft Inhalt Zustand gibt es ein Speicherleck am Boden (denke ich gelesen haben sollte, dass vor dem das Verfahren unter Verwendung)

http://msdn.microsoft.com/en-us/library/bb345628.aspx

und die betreffende Klasse ist intern und nicht SearchResultsCollection außerhalb des beanstandeten Verfahren aussetzen, damit ich nicht auf die Ergebnisse bekommen sie verfügen oder von der Klasse erben und die Methode außer Kraft setzen.

So sind meine Fragen

Hat jemand anderes dieses Problem gestoßen? Wenn ja, könntest du es umgehen?

Gibt es eine Option neben dem Umschreiben der Anwendung, die keinen .Net 3.5 Active Directory-Code verwendet?

Dank

Antwort

0

Ich habe den gleichen Fehler aufgetreten ist, und nein, ich habe keine Abhilfe andere als den Directory Ansatz.

Verwandte Themen