2011-03-21 77 views
0

我们机构有一个大的LDAP系统,我们通过端口636上的LDAPS访问。我试图创建一个IQueryable接口到这个LDAP,它映射到现有的People实体但有麻烦。IQueryable to non-AD LDAP

我提到上述,所以大家都知道我的最终目标,但是如果有人能够帮助我简单地对这个非AD的LDAP运行成功的查询,即使它在IQueryable领域之外,我也会很满意。这里是我到目前为止(我已经编辑了安全密码,uid和OU):

var url = @"ldaps://ldap.ucdavis.edu:636/uid=s1,ou=s2,dc=ucdavis,dc=edu"; 
     var password = @"something"; 

     DirectoryEntry entry = new DirectoryEntry(url); 
     entry.Password = password; 
     entry.AuthenticationType = AuthenticationTypes.Secure; 

     DirectorySearcher mySearcher = new DirectorySearcher(entry); 

     SearchResultCollection results; 

     results = mySearcher.FindAll(); 

     foreach(SearchResult resEnt in results) { 
      ResultPropertyCollection propcoll = resEnt.Properties; 

      foreach (string key in propcoll.PropertyNames) 
      { 
       foreach (object values in propcoll[key]) 
       { 
        switch (key) 
        { 
         case "sn": 
          //sb.Append(key.ToString() + "<surname>" 
          //+ values.ToString() + "</surname>"); 
          break; 
         case "cn": 
          //sb.Append(key.ToString() + "<cn>" 
          //+ values.ToString() + "</cn>"); 
          break; 
         case "name": 
          //sb.Append(key.ToString() + "<name>" 
          //+ values.ToString() + "</name>"); 
          break; 
        } 
       } 
      } 
     } 

但我不断收到就行了mySearcher.FindAll()“未知错误”。有人在这里看到一个明显的问题?我是否正确指定了ou和uid?

+0

谢谢,但没有去,似乎没有在差错中有所作为。 – Christopher 2011-03-21 22:46:13

回答

2

>在这里看到一个明显的问题?

搜索查询本身在哪里?

DirectorySearcher(entry); 

它根据给定的基路径初始化搜索者。

尝试将“filter”属性设置为有效的LDAP搜索字符串,例如“(objectClass = inetOrgPerson)”。

此外,请尝试将SearchScope设置为OneLevel。

无论如何,我真的不认为这会有所帮助。

AFAIK DirectorySearcher仅仅是ADSI的封装。你应该使用的是来自System.DirectoryServices.Protocols命名空间的类,请参阅此文章:http://msdn.microsoft.com/en-us/library/bb332056.aspx

0

我不知道LDAP DN是否正确? AD使用dc = acme,dc = com,但其他LDAP服务器可能会使用ou = ucdavis,o = edu。