Неоднозначное разрешение имен (anr = * ma *) эквивалентно в .NET 3.5 DirectoryServices.AccountManagement - PullRequest
1 голос
/ 07 июля 2010

Вне старого и нового (э). Я откладываю старую услугу «asmx» vb.net asp.net 2.0 в пользу блестящей новой службы WCF c # .net asp.net 4.0.

Мой старый сервис использовал System.DirectoryServices.DirectorySearcher с хорошим фильтром anr = и допускал поиск в стиле Google для пользовательских объектов из одиночного поля ввода.

Мне бы очень хотелось воспользоваться преимуществами System.DirectoryServices.AccountManagement 3.5, но я смог найти только варианты Microsoft «Запрос по примеру»:

UserPrincipal u = new UserPrincipal(ctx);
u.GivenName = "Jim";
u.Surname = "Daly";
PrincipalSearcher ps = new PrincipalSearcher();
ps.QueryFilter = u;
PrincipalSearchResult<Principal> results = ps.FindAll();

У меня вопрос: нужно ли стирать свой код DirectorySearcher для поиска по типу anr или мне не хватает некоторых очевидных неоднозначных возможностей поиска в пространстве имен AccountManagement?

Большое спасибо.

J.

1 Ответ

5 голосов
/ 22 октября 2010

Вы можете написать свою собственную реализацию UserPrincipal, которая предоставляет настраиваемое свойство:

[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
public class CustomUserPrincipal : UserPrincipal
{
    public CustomUserPrincipal ( PrincipalContext context ) : base ( context )
    {
    }

    [DirectoryProperty("anr")]
    public string Anr
    {
        get { return (string)ExtensionGet ( "anr" )[0]; }
        set { ExtensionSet ( "anr", value ); }
    }
}

Использование

var u = new CustomUserPrincipal(ctx) { Anr = "*mr*" };
var ps = new PrincipalSearcher() { QueryFilter = u };
var results = ps.FindAll();
...