我在下面有一个简单的设置来搜索用户。
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://someserver:123/OU=d-users,DC=domain,DC=x,DC=y,DC=com");
rootEntry.AuthenticationType = AuthenticationTypes.None;
string filter = "sAMAccountName=" + AccountName;
DirectorySearcher searcher = new DirectorySearcher(rootEntry, filter);
SearchResult foundUser = searcher.FindOne();
出于某种原因,我可以通过简单的控制台/ Windows窗体应用程序进行搜索,但无法从IIS(6.1)上的wcf或asmx服务(v4.0,集成)进行搜索。例外如下;
exception:System.Runtime.InteropServices.COMException (0x8007200A): The specified directory service attribute or value does not exist.
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 Tester.FindAccountByName(String AccountName)
答案 0 :(得分:0)
尝试将过滤器放入括号:
string filter = string.Format("(sAMAccountName={0})", AccountName);
答案 1 :(得分:0)
尝试使用DirectorySearcher,如下所示:
using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry("LDAP://someserver:123/OU=d-users,DC=domain,DC=x,DC=y,DC=com")))
{
StringBuilder filterStringBuilder = new StringBuilder();
// Just create a single LDAP query for all user SIDs
filterStringBuilder.Append("(&(objectClass=user)(|");
filterStringBuilder.AppendFormat("({0}={1})", "sAMAccountName", AccountName);
filterStringBuilder.Append("))");
searcher.PageSize = 1000; // Very important to have it here. Otherwise you'll get only 1000 at all. Please refere to DirectorySearcher documentation
searcher.Filter = filterStringBuilder.ToString();
searcher.ReferralChasing = ReferralChasingOption.None;
searcher.PropertiesToLoad.AddRange(
new[] { "DistinguishedName" });
var result = searcher.FindOne();
}
有关如何使用您可以在msdn或stackoverflow
上找到的DirectorySearcher的更多示例