【发布时间】:2014-07-15 03:30:59
【问题描述】:
因为我们需要使用 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);
}
执行源代码后(我们已经验证了凭据、主机、端口等 - 使用外部 3rd 方软件),我们得到以下异常:
超出大小限制
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详情: System.DirectoryServices.Protocols.DirectoryOperationException:超出大小限制
来源错误:
response = (SearchResponse) con.SendRequest(request);
[DirectoryOperationException: The size limit was exceeded] System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32messageId、LdapOperation 操作、ResultAll resultType、TimeSpan requestTimeOut, 布尔异常OnTimeOut) +2385 System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest 请求,时间跨度请求超时)+499 System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest 请求)+50 UserSearchProvider.ADUserSearchProvider.QueryStore(UserSearchCriteriaCollection 标准,Action
1 logMessage) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\ADUserSearchProvider.cs:298 UserSearchProvider.UserSearchProvider.QueryAndSort(UserSearchCriteriaCollection criterias, Action1 logMessage)在 c:\Users\stemarie\Documents\Visual 工作室 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:77 UserSearchProvider.UserSearchProvider.Search(UserSearchCriteriaCollection 标准,Action1 logMessage) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:33 UserSearchProvider.UserSearchService.Search(UserSearchCriteriaCollection criterias, Action1 logMessage)在 c:\Users\stemarie\Documents\Visual 工作室 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchService.cs:44 c:\Users\stemarie\Documents\Visual Studio 中的 UserSearchProviderTest._Default.Page_Load(Object sender, EventArgs e) 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProviderTest\Default.aspx.cs:28
让我感到困惑的部分是我们确实指定了最大大小限制,我们不希望超过 100 个条目 - 我们想要限制它。但是,即使我们将 SizeLimit 指定为 1,该库也会始终抛出错误。
是否有人对此问题有任何见解/建议?我们非常接近让这项工作正常进行,只需要解决最后一个问题。
【问题讨论】:
-
有多少目录条目与您的搜索匹配?如果删除 SizeLimit 行会发生什么?如果 sizelimit 的值低于服务器页面大小,似乎 sizelimit 将失败。我想你应该尝试发出分页搜索见stackoverflow.com/q/1646518/1236044
-
我确实在请求中发出了分页搜索控件,但得到的响应是服务器不支持分页搜索。
-
我不知道有多少条目可以匹配我的搜索,但我只想要其中的 100 个。代码的目的是为我们的产品创建一个在 LDAPS 中执行“用户搜索”的组件——这个库不是一个 frankenlibrary——我们希望它是一个非常强大的 LDAPS 用户搜索(适配器模式)库,以便我们可以提供这给我们的客户。所以我无法预测用户输入以及这对图书馆意味着多少结果。
-
在此页面go4answers.webhost4life.com/Example/… 上说:“是的,您可以捕获异常并查看其 Response.Entries 属性!”我认为值得一试;-)
-
找到了 - 我需要将 Exception.Response 转换为 SearchResponse - 然后我得到所有结果!