Exception beim Zugriff ins AD: Der Server ist nicht funktionstüchtig.

MrMarco

Grünschnabel
Guten Morgen!

Im Moment habe ich die nette Aufgabe die Gruppen incl. ihrer Mitglieder aus unserem AD auszulesen.

Dies funktioniert auch sehr gut, nur passiert es immer wieder einmal, daß der ausgewählte AD-Server folgende Antwort liefert:

Der Server ist nicht funktionstüchtig.

Ich frage zur Sicherheit ingesamt 3x bei dem gleichen AD-Controller nach. In der Regel klappt es spätestens bei der 2. Anfrage dann wieder.

Es gibt aber auch Momente, wo der Server sich für eine knappe Minute tot stellt.

Zwar schwenke ich dann auf einen anderen AD-Controller um, von welchem ich die Daten dann erhalte, aber irgendwie finde ich diese Lösung nicht besonderst sauber. Zumal die Performance darunter massiv leidet.

Ich habe auch schon die unter diesem Forenbeitrag beschriebenen Änderungen durchgeführt.

Sprich ich Versuche den "dNSHostName" auszulesen. Interessanterweise bekomme ich hier NULL geliefert. Vermutlich aufgrund eines Programmierfehlers meinerseits.

Der oben beschriebene Fehler "Der Server ist nicht funktionstüchtig." tritt bei ca. 10% aller Anfragen auf.

Mir ist bewußt das mein Code nicht sauber ist. Nachdem die Funktionalität hergestellt ist, werde ich den säubern, Fehlerbehandlungen einbauen etc. Keine Panik also ;)

Code:
DirectoryEntry objGroupEntry;             // Group Results.

DirectorySearcher dirSearcher = new DirectorySearcher(_dirEntry);

dirSearcher.PropertiesToLoad.Add("name");
dirSearcher.Filter = "(objectCategory=group)";
dirSearcher.PageSize = conf.PageSize;

foreach (SearchResult searchResult in dirSearcher.FindAll())
{
  objGroupEntry = searchResult.GetDirectoryEntry();

  foreach (object objMember in objGroupEntry.Properties["member"])
  {
    //set a new empty row
    DataRow rwGlobalGroup = tbGlobalGroups.NewRow();

    //populate the column
    rwGlobalGroup["Groupname"] = GetValue(searchResult, "name");
    //rwGlobalGroup["Account"] = objMember.ToString();
    rwGlobalGroup["Account"] = GetPropertyValue("name", objMember.ToString(), conf);

    //Console.WriteLine("{0}\t{1}\t{2}", GetValue(searchResult, "name"), GetPropertyValue("name", objMember.ToString(), conf), objMember.ToString());

    //append the row to the table of the dataset
    tbGlobalGroups.Rows.Add(rwGlobalGroup);
  }
}




private string GetPropertyValue(string propertyName, string LDAPPath, Config conf)
{
...
        try
        {
          DirectoryEntry objEntry = new DirectoryEntry("LDAP://" + conf.ADServers[conf.AdServerAvailable]);
          string host = (string)objEntry.Properties["dNSHostName"].Value;
          DirectoryEntry objUserEntry = new DirectoryEntry("LDAP://" + host + "/" + LDAPPath);


          DirectorySearcher dirSearcher = new DirectorySearcher(objUserEntry);
          dirSearcher.PropertiesToLoad.Add(propertyName);
          dirSearcher.PageSize = conf.PageSize;

          SearchResult searchResult = dirSearcher.FindOne();

          propertyValue = GetValue(searchResult, propertyName);

          dirSearcher.Dispose();
          objUserEntry.Close();
          objUserEntry.Dispose();

          i = 4;
          Console.WriteLine("Hat geklappt");
          return propertyValue;
        }
        catch (Exception ex)
        {
          Console.WriteLine("LDAP://" + conf.ADServers[conf.AdServerAvailable] + "/" + LDAPPath);
          Console.WriteLine("Aussetzer Nr. {0}\t{1}", i, ex.Message);
        }
...

Der AD-Controller (bzw. DIE AD-Controller) laufen unter Windows 2003 SP1. Der Client der die Daten abfrägt ist im Moment ein Windows XP SP2 Client.

Eventuell hat ja jemand in der Vergangenheit ein ähnliches Problem gehabt.

Wäre nett wenn mich jemand in die Richtung schubsen könnte. Nach Stundenlangem lesen von HowTos und MSDN Artikeln blicke ich nicht mehr wirklich durch. :(
 

Neue Beiträge

Zurück