2014-11-12 3 views
1

Я хочу создать веб-сайт каталога интрасети, используя Active Directory для нашей компании. Я получил это до сих пор, но при запуске в режиме отладки разрывы кода в searchResultCollection....search.findAll(); отображения:пользователей активного каталога на asp.net

[DirectoryServicesCOMException (0x80072020):. Произошла ошибка операции]

Я попытался изменить IIS Игнорирование asp.net включено, но я получаю HTTP-ошибку 500.24. Мое имя пользователя имеет доступ для чтения к Active Directory. Есть ли какая-то вещь, которую я пропускаю, или кто-то может указать мне в правильном направлении. Я везде искал это, я застрял.

Заранее благодарим за любую помощь.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.DirectoryServices; 
using System.Web.Security; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      if (!Page.IsPostBack) 
      GetADUsers(); 
     } 

     public void GetADUsers() 
     { 
      DirectoryEntry myLdap = new DirectoryEntry("LDAP://OU=Nix,DC=systems,DC=com"); 
      DirectorySearcher search = new DirectorySearcher(myLdap); 
      search.CacheResults = true; 
      search.SearchScope = SearchScope.Subtree; 
      search.Filter = "(objectlass=person)"; 
      SearchResultCollection allResults = search.FindAll(); 

      foreach (SearchResult sr in allResults) 
      { 
       Response.Write(sr.Properties["name"].ToString()); 
      } 
    } 
+0

Ну сегодня после перезагрузки я протестировал его снова, без ошибок. Я просто добавил search.propertiestoload («any»); и добавил данные сетки и привязки, и он отлично работал. Знак благодарности – Jorge

ответ

0

После самостоятельной перезагрузки я тестировал снова, что он бежал без ошибок, а затем добавил код останова для отображения в виде сетки.

public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
     if (!Page.IsPostBack) 
     GetADUsers(); 
    } 

    public void GetADUsers() 
    { 
     DirectoryEntry myLdap = new DirectoryEntry("LDAP://OU=Nix,DC=systems,DC=com"); 
     DirectorySearcher search = new DirectorySearcher(myLdap); 
     search.CacheResults = true; 
     search.SearchScope = SearchScope.Subtree; 
     search.Filter = "(objectlass=person)"; 
     SearchResultCollection allResults = search.FindAll(); 
     search.PropertiesToLoad.Add("samaccountname"); 

     Grid1.DataSource = allResults; 
     Grid1.DataBind(); 
} 
1

Вы можете использовать PrincipalSearcher и «запрос по образцу» принципал сделать ваш поиск:

// create your domain context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // define a "query-by-example" principal - here, we search for a UserPrincipal 
    // and with the first name (GivenName) of "Bruce" and a last name (Surname) of "Miller" 
    UserPrincipal qbeUser = new UserPrincipal(ctx); 
    qbeUser.GivenName = "Bruce"; 
    qbeUser.Surname = "Miller"; 

    // create your principal searcher passing in the QBE principal  
    PrincipalSearcher srch = new PrincipalSearcher(qbeUser); 

    // find all matches 
    foreach(var found in srch.FindAll()) 
    { 
     // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....   
    } 
} 

Если вы еще не - абсолютно прочитать статью Managing Directory Security Principals in the .NET Framework 3.5 MSDN, который показывает хорошо как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement. Или просмотрите пространство имен .

Конечно, в зависимости от ваших потребностей, вы можете указать другие свойства на том, что «запрос по образцу» пользователь принципала вы создаете:

  • DisplayName (обычно: первое имя + пробел + фамилия)
  • SAM Account Name - ваш Windows/AD имя учетной записи
  • User Principal Name - ваш "[email protected]" имя стиля

Вы можете Spe cify любое из свойств на UserPrincipal и использовать их как «запрос по примеру» для вашего PrincipalSearcher.

Смежные вопросы