- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
由于我们需要使用 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 方软件)时,我们得到以下异常:
描述:在执行当前网络请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
异常详细信息:System.DirectoryServices.Protocols.DirectoryOperationException:超出大小限制
来源错误:
response = (SearchResponse) con.SendRequest(request);
[DirectoryOperationException: The size limit was exceeded]
System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32messageId, LdapOperation operation, ResultAll resultType, TimeSpan requestTimeOut, Boolean exceptionOnTimeOut) +2385 System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout) +499 System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request) +50 UserSearchProvider.ADUserSearchProvider.QueryStore(UserSearchCriteriaCollection criterias, Action
1 logMessage) in c:\Users\stemarie\Documents\Visual
1 logMessage) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:77 UserSearchProvider.UserSearchProvider.Search(UserSearchCriteriaCollection criterias, Action
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\ADUserSearchProvider.cs:298
UserSearchProvider.UserSearchProvider.QueryAndSort(UserSearchCriteriaCollection
criterias, Action1 logMessage) in c:\Users\stemarie\Documents\Visual
1 logMessage) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchService.cs:44 UserSearchProviderTest._Default.Page_Load(Object sender, EventArgs e) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProviderTest\Default.aspx.cs:28
Studio
2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:33
UserSearchProvider.UserSearchService.Search(UserSearchCriteriaCollection
criterias, Action
让我感到困惑的部分是我们确实指定了最大大小限制,我们不想要超过 100 个条目 - 我们想要限制它。但是,即使我们将 SizeLimit 指定为 1,该库也会始终抛出错误。
有人对这个问题有任何见解/建议吗?我们非常接近于让这项工作正常进行,只需要解决最后一个问题。
最佳答案
您应该在与此类似的功能中使用 cookie。该函数返回 SearchResponse 对象的集合,调用者应该对其进行循环。
private List<SearchResponse> SearchDirectory(string distinguishedName, string searchFilter, System.DirectoryServices.Protocols.SearchScope searchScope, params string[] attributeList)
{
List<SearchResponse> result = new List<SearchResponse>();
SearchResponse response = null;
int maxResultsToRequest = 100;
try
{
PageResultRequestControl pageRequestControl = new PageResultRequestControl(maxResultsToRequest);
// used to retrieve the cookie to send for the subsequent request
PageResultResponseControl pageResponseControl;
SearchRequest searchRequest = new SearchRequest(distinguishedName, searchFilter, searchScope, attributeList);
searchRequest.Controls.Add(pageRequestControl);
while (true)
{
response = (SearchResponse)connection.SendRequest(searchRequest);
result.Add(response);
pageResponseControl = (PageResultResponseControl)response.Controls[0];
if (pageResponseControl.Cookie.Length == 0)
break;
pageRequestControl.Cookie = pageResponseControl.Cookie;
}
}
catch (Exception e)
{
// do something with the error
}
return result;
}
关于c# - LdapConnection SearchRequest 为 "The size limit was exceeded"抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13567685/
我正在尝试查询 LDAP 服务器以查找 LDAP 用户并将其导入我的系统。但是,当我尝试这样做时,请求抛出 DirectoryOperationException,提示 The object does
我正在尝试使用NEST SearchRequest对象在我的ElasticSearch索引中查询类型的动态列表。 public object Search(object runTimeData) {
我有多个 ElasticSearch 索引在多台机器上分片,我使用 logstash 将日志提取到这些机器中.我通过 REST API 公开数据。 API 层搜索多个术语(使用 ElasticSear
Elasticsearch :6.1.2 我有一个通过 JSON 的输入查询,我想使用 high level Java API使用该查询数据构建搜索请求。 String jsonQuery = "..
我正在编写与 Microsoft Active Directory 集成的软件。以前,我们通过 DirectoryServices.Protocols.SearchRequest 使用如下查询搜索特定
由于我们需要使用 LDAPS 连接到 LDAP 服务器这一事实,我们必须使用 LdapConnection 而不是 DirectoryEntry。 这是源代码: SearchRespo
我知道 System.DirectoryServices 是 System.DirectoryServices.Protocols 的“之上层”,并抽象了一些复杂性。 使用 System.Direct
我正在从 ES 1.7 迁移到 6.0,我正在尝试找出一种方法来执行搜索请求,将普通查询传递给 High Level REST Java client .为了使查询易于阅读(和维护),我们希望使用 J
我是一名优秀的程序员,十分优秀!