LDAPS kullanarak bir LDAP sunucusuna bağlanmamız gerektiğinden, DirectoryEntry yerine LdapConnection kullanmamız gerekir. İşte LdapConnection SearchRequest, "Boyut sınırı aşıldı" için istisna atar
kaynak kodu: kaynak kodunun yürütülmesi (biz vb kimlik bilgilerini, ev sahibi, liman, doğruladıktan - Harici 3. parti yazılım kullanarak) üzerine 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);
}
aşağıdaki istisna olsun:
boyut sınırı
Açıklama aşıldı: işlenmemiş özel durum geçerli web isteği yürütülürken oluştu. Hata hakkında ve kodda nereden kaynaklandığı hakkında daha fazla bilgi için yığın izlemesini gözden geçirin.
durum ayrıntıları: System.DirectoryServices.Protocols.DirectoryOperationException: boyut sınırı
aşıldıKaynak hatası:
response = (SearchResponse) con.SendRequest(request);
[DirectoryOperationException: The size limit was exceeded] System.DirectoryServices.Protocols.LdapConnection.ConstructResponse(Int32
messageId, 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 Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\ADUserSearchProvider.cs:298 UserSearchProvider.UserSearchProvider.QueryAndSort(UserSearchCriteriaCollection criterias, Action
1 logMessage) in c:\Users\stemarie\Documents\Visual Studio 2012\Projects\Idealink.Modules\UserSearchProvider\UserSearchProvider\UserSearchProvider.cs:77 UserSearchProvider.UserSearchProvider.Search(UserSearchCriteriaCollection criterias, Action1 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) 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
beni karıştırır kısmı yaptığımız olmasıdır Maksimum boyut sınırını belirtin, 100'den fazla giriş istemiyoruz - sınırlamak istiyoruz. Fakat yine de, bir BOXLIMIT değeri belirtsek bile kitaplık sürekli olarak hata atar. 0
Bu sorunla ilgili herhangi bir fikir/öneri var mı? Bu çalışmaya başlamaya çok yakınız ve sadece bu son sorunu çözmeliyiz. Sonradan anlaşıldı ki
Aramanızla eşleşen dizin girişi sayısı nedir? SizeLimit satırını kaldırırsanız ne olur? Değeri sunucu sayfa boyutundan daha düşük olduğunda, sizelimit başarısız olur. Sanırım sayfalanmış bir arama yayınlamayı denemelisiniz, bkz. Http://stackoverflow.com/q/1646518/1236044 – jbl
İstekte sayfalanmış bir arama denetimi yaptım ancak sunucunun disk belleği aramayı desteklemediği yönünde bir yanıt aldım. –
Aramamla kaç tane giriş yapılabileceğini bilmiyorum, ama sadece 100 tane istiyorum. Kodun amacı, ürünümüz için LDAPS'de "kullanıcı aramalarını" gerçekleştiren bir bileşen oluşturmaktır - Bu kitaplık bir frankenlibrary değil - biz de sunabileceğimiz çok sağlam bir LDAPS kullanıcı araması (adaptör kalıbı) kitaplığı olmasını istiyoruz Bu müşterilerimize. Bu yüzden, kullanıcı girdisini tahmin etmenin ve kitaplık için bunun ne anlama gelebileceğini tahmin etmenin bir yolu yok. –