由于我们需要使用 LDAPS 连接到 LDAP 服务器,因此我们必须使用 LdapConnection 而不是 DirectoryEntry。
这是源代码:
SearchResponse response;
using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(Host, Port)))
{
if (IsSSL)
{
con.SessionOptions.SecureSocketLayer = true;
con.SessionOptions.VerifyServerCertificate =
(connection, certificate)
=> true;
}
con.Credential = new NetworkCredential(_username, _password);
con.AuthType = AuthType.Basic;
con.Bind();
if (logMessage != null)
logMessage("Connected to LDAP");
string sFilter = String.Format(
"(&(objectcategory=person)(objectclass=user){0}(!(userAccountControl:1.2.840.113556.1.4.803:=2)))",
filter
);
SearchRequest request = new SearchRequest("OU=Corp,DC=mydc,DC=com", sFilter, SearchScope.Subtree);
request.Attributes.Add(Resources.objectguid);
request.Attributes.Add(Resources.givenname);
request.Attributes.Add(Resources.sn);
request.Attributes.Add(Resources.initials);
request.Attributes.Add(Resources.samaccountname);
request.Attributes.Add(Resources.userprincipalname);
request.Attributes.Add(Resources.mail);
request.Attributes.Add(Resources.objectsid);
request.Attributes.Add(Resources.department);
request.Attributes.Add(Resources.company);
request.SizeLimit = 10;
response = (SearchResponse) con.SendRequest(request);
}
执行源代码后(我们已经验证了凭据、主机、端口等 - 使用外部第 3 方软件),我们得到以下异常:
超出了大小限制
描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
异常详细信息:System.DirectoryServices.Protocols.DirectoryOperationException:超出了大小限制
来源错误:
response = (SearchResponse) con.SendRequest(request);
[DirectoryOperationException: The size limit was exceeded]
System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32
messageId、LdapOperation 操作、ResultAll 结果类型、TimeSpan
requestTimeOut,布尔异常OnTimeOut)+2385
System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest
请求,时间跨度请求超时)+499
System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest
请求)+50
UserSearchProvider.ADUserSearchProvider.QueryStore(UserSearchCriteriaCollection
标准、行动1 logMessage) in c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\ADUserSearchProvider.cs:298
UserSearchProvider.UserSearchProvider.QueryAndSort(UserSearchCriteriaCollection
criterias, Action
1 logMessage) 在 c:\Users\stemarie\Documents\Visual 中
工作室
2012\项目\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:77
UserSearchProvider.UserSearchProvider.Search(UserSearchCriteriaCollection
标准、行动1 logMessage) in c:\Users\stemarie\Documents\Visual
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:33
UserSearchProvider.UserSearchService.Search(UserSearchCriteriaCollection
criterias, Action
1 logMessage) 在 c:\Users\stemarie\Documents\Visual 中
工作室
2012\项目\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchService.cs:44
UserSearchProviderTest._Default.Page_Load(对象发送者,EventArgs e)位于 c:\Users\stemarie\Documents\Visual Studio
2012\项目\Idealink.Modules\UserSearchProvider\UserSearchProviderTest\Default.aspx.cs:28
让我困惑的部分是我们确实指定了最大大小限制,我们不想要超过 100 个条目 - 我们想要限制它。但即使我们将 SizeLimit 指定为 1,库仍然会抛出错误。
有人对这个问题有任何见解/建议吗?我们已经非常接近实现这一目标,只需要解决最后一个问题。