Я работаю над приложением для управления активными каталогами. В дополнение к обычному созданию нового пользователя, включению / отключению учетной записи, сбросу моего пароля и т. Д. Он также управляет разрешениями приложений для всех клиентских веб-приложений. Управление приложениями осуществляется тысячами групп AD, например, из трехбуквенных кодов для приложения, раздела и сайта. Существуют также сотни групп AD, которые определяют, для каких приложений и местоположений координатор может предоставить права. Все эти группы, в свою очередь, принадлежат другим группам, поэтому я обычно фильтрую список групп с помощью свойства MemberOf, чтобы найти группы, к которым непосредственно принадлежит пользователь (или у каждого есть права на все). Я широко использовал пространство имен System.DirectoryServices.AccountManagment, используя метод FindByIdentity в 31 месте приложения. Этот метод вызывает закрытый метод FindPrincipalByIdentRefHelper для внутреннего класса ADStoreCtx. SearchResultCollection создается, но не удаляется, поэтому в конечном итоге, как правило, один или два раза в день веб-серверу не хватает памяти, и все приложения на веб-сервере перестают отвечать до тех пор, пока iis не будет сброшен, поскольку ресурсы, используемые объектами com, никогда не передаются .
Есть места, где я обращаюсь к базовым объектам каталогов, но во многих местах я использую свойства в Принципале - это значительное улучшение по сравнению с использованием эзотерических имен свойств объявлений в .Net 2.0 Directory код услуги.
Я связался с Microsoft по поводу этой проблемы, и она была исправлена в .Net 4.0, но в настоящее время у них нет планов по ее исправлению в 3.5, если в сообществе нет интереса по этому поводу.
Я нашел информацию об этом только в нескольких местах
В документации MDSN в состоянии контента сообщества внизу есть утечка памяти (думаю, мне следовало прочитать это, прежде чем использовать метод)
http://msdn.microsoft.com/en-us/library/bb345628.aspx
И рассматриваемый класс является внутренним и не предоставляет SearchResultsCollection вне метода-нарушителя, поэтому я не могу получить результаты, чтобы удалить их или унаследовать от класса и переопределить метод.
Так что мои вопросы
Кто-нибудь еще сталкивался с этой проблемой? Если так, то смогли ли вы обойти это?
Есть ли у меня какая-либо опция, кроме переписывания приложения, не использующего какой-либо код активной директории .Net 3.5?
Спасибо