Ошибка соединения LDAP - PullRequest
       1

Ошибка соединения LDAP

1 голос
/ 06 сентября 2011

У меня проблема с подключением к моему ldap.Он продолжает выдавать мне COMExceptionError (неверный параметр)

Вот код, который у меня есть:

static void Main(string[] args)
    {

        DirectoryEntry ldapConnection = new DirectoryEntry("10.9.130.113:667");
        ldapConnection.Path = "LDAP://ou=Users,ou=CorporateStore,ou=Absa,c=za";
        ldapConnection.AuthenticationType = AuthenticationTypes.Anonymous;

        DirectorySearcher ds = new DirectorySearcher(ldapConnection);
        SearchResult result = ds.FindOne();
        Console.ReadLine();
        if (result != null)
        {


            ResultPropertyCollection fields = result.Properties;

            foreach (String ldapField in fields.PropertyNames)
            {


                foreach (Object myCollection in fields[ldapField])
                    Console.WriteLine(String.Format("{0,-20} : {1}",
                                  ldapField, myCollection.ToString()));
                Console.ReadLine();
            }

Это строка, в которой происходит ошибка:

SearchResult result = ds.findOne();

Вот исключение Ошибка и трассировка стека:

System.Runtime.InteropServices.COMException was unhandled
  Message=The parameter is incorrect.

  Source=System.DirectoryServices
  ErrorCode=-2147024809
  StackTrace:
       at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
       at System.DirectoryServices.DirectoryEntry.Bind()
       at System.DirectoryServices.DirectoryEntry.get_AdsObject()
       at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
       at System.DirectoryServices.DirectorySearcher.FindOne()
       at LDAPConnector.Program.Main(String[] args) in c:\documents and settings\expn261\my documents\visual studio 2010\Projects\LDAPConnector\LDAPConnector\Program.cs:line 23
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

Есть идеи?

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Попробуйте следующее:

  1. Если вашим LDAP-сервером является AD, то вы должны выполнить привязку к соединению, поскольку AD не разрешает анонимные подключения.
  2. Насколько я понял, вы пытаетесь подключиться через SSL, поэтому сначала попытайтесь подключиться без SSL (порт по умолчанию 389), также попробуйте указать адреса в следующем формате "ldaps: //10.9.130.113: 667" .
  3. Вам не нужен префикс "LDAP: //" в ldapConnection.Path
  4. Перед использованием поиска попробуйте выполнить более простые операции, такие как простое связывание, чтобы сузить проблему.
1 голос
/ 06 сентября 2011

Вы должны указать некоторые свойства для загрузки, чтобы метод findone () работал. В этом примере попытайтесь найти свойства пользователя (имя пользователя является переменной стрига).

DirectoryContext context = new DirectoryContext(DirectoryContextType.Domain, domain); //domain is a string with the FQDN (ex: int.domain.local) or alias (es: mydomainname)

DomainControllerCollection dcc = DomainController.FindAll(context);

DirectorySearcher ds;
            ds = dcc[0].GetDirectorySearcher();
            ds.Filter = String.Format("(&(sAMAccountName={0})(objectClass=user))", username);
            ds.PropertiesToLoad.Add("lastLogon");
            ds.PropertiesToLoad.Add("displayName");
            ds.PropertiesToLoad.Add("memberOf");
            ds.PropertiesToLoad.Add("userAccountControl");
            ds.PropertiesToLoad.Add("ADSPath");
            ds.PropertiesToLoad.Add("PrimaryGroupID");
            ds.PropertiesToLoad.Add("pwdLastSet");
            ds.PropertiesToLoad.Add("maxPwdAge");
            ds.PropertiesToLoad.Add("mail");
            ds.PropertiesToLoad.Add("distinguishedName");
            ds.PropertiesToLoad.Add("mdbstoragequota");
            ds.PropertiesToLoad.Add("SamAccountName");
            ds.SizeLimit = 15;

            SearchResult sr = ds.FindOne();
0 голосов
/ 06 сентября 2011

Кажется, вы определяете разные пути в конструкторе к DirectoryEntry, а затем переопределяете его, устанавливая свойство Path. Если ваш сервер отличается от домена в RDN, вы должны указать его в пути. Можете ли вы попытаться сделать это таким образом и посмотреть, если вы получите другую ошибку?

    DirectoryEntry ldapConnection = new DirectoryEntry("LDAP://10.9.130.113:667/ou=Users,ou=CorporateStore,ou=Absa,dc=za");

И пропустите часть, где вы устанавливаете путь через свойство.

РЕДАКТИРОВАТЬ: УВЕДОМЛЕНИЕ Также кажется, что вы пропустили "d" на dc = za.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...