DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=Test1,DC=Test2,DC=gov,DC=lk");
using (DirectorySearcher ds = new DirectorySearcher(oDE))
{
ds.PropertiesToLoad.Add("name");
ds.PropertiesToLoad.Add("userPrincipalName");
ds.Filter = "(&(objectClass=user))";
SearchResultCollection results = ds.FindAll();
foreach (SearchResult result in results)
{
Console.WriteLine("{0} - {1}",
result.Properties["name"][0].ToString(),
result.Properties["userPrincipalName"][0].ToString());
}
}
In der Zeile SearchResultCollection results = ds.FindAll();
bekomme ich eine Ausnahme:
Ein Verweis wurde vom Server zurückgegeben
Warum bekomme ich diese Ausnahme und was bedeutet das?
Dies ist die Antwort auf die Frage. Grund für die Ursache ist mein LDAP-String war falsch
try
{
string adServer = ConfigurationManager.AppSettings["Server"];
string adDomain = ConfigurationManager.AppSettings["Domain"];
string adUsername = ConfigurationManager.AppSettings["AdiminUsername"];
string password = ConfigurationManager.AppSettings["Password"];
string[] dc = adDomain.Split('.');
string dcAdDomain = string.Empty;
foreach (string item in dc)
{
if (dc[dc.Length - 1].Equals(item))
dcAdDomain = dcAdDomain + "DC=" + item;
else
dcAdDomain = dcAdDomain + "DC=" + item + ",";
}
DirectoryEntry de = new DirectoryEntry("LDAP://" + adServer + "/CN=Users," + dcAdDomain, adUsername, password);
DirectorySearcher ds = new DirectorySearcher(de);
ds.SearchScope = SearchScope.Subtree;
ds.Filter = "(&(objectClass=User)(sAMAccountName=" + username + "))";
if (ds.FindOne() != null)
return true;
}
catch (Exception ex)
{
ExLog(ex);
}
return false;
Wahrscheinlich war der von Ihnen angegebene Pfad nicht korrekt. Prüfe das.
Ich würde den Artikel Howto: (Fast) alles in Active Directory über C # empfehlen, was mir in der Vergangenheit im Umgang mit AD wirklich geholfen hat.
Ein Verweis wird von einem AD-Server gesendet, wenn die Informationen nicht selbst angefordert wurden, aber wissen, dass ein anderer Server über die Informationen verfügt. Es wird normalerweise in einer vertrauenswürdigen Umgebung angezeigt, in der ein DC auf ein DC in einer vertrauenswürdigen Domäne verweist.
In Ihrem Fall geben Sie nur eine Domäne an und verlassen sich auf die automatische Suche des zu verwendenden Domänencontrollers. Ich denke, Sie sollten herausfinden, welcher Domänencontroller für die Abfrage verwendet wird, und prüfen, ob dieser wirklich die angeforderten Informationen enthält.
Wenn Sie weitere Informationen zu Ihrem AD-Setup bereitstellen, einschließlich Vertrauensstellungen/Subdomänen, globalen Katalogen und DNS-Ressourceneinträgen für die Domänencontroller, können Sie leichter helfen.
Möglicherweise müssen Sie ReferralChasing auch in DirectorySearcher - http://msdn.Microsoft.com/en-us/library/ms180884(VS.80).aspx aktivieren.
Hatte das gleiche Problem und es geschafft, es zu lösen.
In meinem Fall hatte ich eine AD-Gruppe in der aktuellen Anmeldedomäne mit Mitgliedern (Benutzern) aus einer Subdomäne. Der Server, auf dem der Code ausgeführt wurde, konnte nicht auf den Domänencontroller der Subdomäne zugreifen (der Server hatte zuvor noch nie auf die Subdomäne zugreifen müssen).
Ich hatte eine Weile Probleme, da mein Desktop-PC auf die Domäne zugreifen konnte, sodass alles nach OK im Plugin MMC (Active Directory-Benutzer und -Computer) aussah.
Hoffe das hilft jemand anderem.
Ich weiß, das klingt vielleicht dumm, aber ich bin kürzlich selbst darauf gestoßen. Stellen Sie sicher, dass der Domänencontroller nicht schreibgeschützt ist.
Ein Verweis, der vom Serverfehler zurückgegeben wurde, bedeutet normalerweise, dass die IP-Adresse nicht von der Domäne gehostet wird, die in der Verbindungszeichenfolge angegeben ist. Weitere Informationen finden Sie unter diesem Link:
In meinem Fall wurden mir Verweise angezeigt, als ich mit einem Konto in einer vertrauenswürdigen Domäne über SSO auf AD zugegriffen habe. Das Problem wurde behoben, als ich mich mit expliziten Anmeldeinformationen in der lokalen Domäne verband.
ich habe ersetzt
DirectoryEntry de = new DirectoryEntry("blah.com");
mit
DirectoryEntry de = new DirectoryEntry("blah.com", "[email protected]", "supersecret");
und das Problem ging weg.