Неоднозначное разрешение имен (anr=*ma*) эквивалентно в.NET 3.5 DirectoryServices.AccountManagement

Долой старое и новое. Я откладываю старую услугу "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 ответ

Решение

Возможно, вы сможете написать собственную реализацию 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();
Другие вопросы по тегам