System.DirectoryServices.DirectoryServicesCOMException(0x800700EA):有更多数据可用

由于某种原因,在星期一,上周工作的代码突然开始给我以下错误。

System.DirectoryServices.DirectoryServicesCOMException(0x800700EA):有更多数据可用。 当我尝试针对广告查询执行FindAll时会发生这种情况

我做了一个小型控制台应用程序,并能够重现错误。 什么会导致此错误发生?

static void Main(string[] args) { var propToLoad = new StringCollection(); propToLoad.Add(ADProperty.DistinguishedName); DirectoryEntry de = new DirectoryEntry(); de.Path = "MySearchROOT"; DirectorySearcher ser = new DirectorySearcher(de); ser.Filter = "(&(&(&(dfaitUserType=PER)(objectCategory=person)(objectClass=user)(!dfaitObjectStatus=*)(!msExchHideFromAddressLists=TRUE))(&(sAMAccountName=*)(dfaitOrgCode=*)(objectCategory=person)(objectClass=user)(!dfaitObjectStatus=*)(!msExchHideFromAddressLists=TRUE)))(|(employeeType=CBS)(employeeType=LES)(employeeType=CON)(employeeType=OGD)(employeeType=OTH)(employeeType=MIN)))"; // We made constants to represent all the Ad properties ser.PropertiesToLoad.Add(ADProperty.Surname); ser.PropertiesToLoad.Add(ADProperty.GivenName); ser.PropertiesToLoad.Add(ADProperty.Mail); ser.PropertiesToLoad.Add(ADProperty.DisplayName); ser.PropertiesToLoad.Add(ADProperty.DfaitEdsId); ser.PropertiesToLoad.Add(ADProperty.DistinguishedName); ser.PropertiesToLoad.Add(ADProperty.MemberOf); ser.PropertiesToLoad.Add(ADProperty.EmployeeType); ser.PropertiesToLoad.Add(ADProperty.Department); ser.PropertiesToLoad.Add(ADProperty.Company); ser.PropertiesToLoad.Add(ADProperty.MSExchHideFromAddressLists); ser.PropertiesToLoad.Add(ADProperty.MailNickname); ser.PropertiesToLoad.Add(ADProperty.Initials); ser.PropertiesToLoad.Add(ADProperty.TelephoneNumber); ser.PropertiesToLoad.Add(ADProperty.FacsimileTelephoneNumber); ser.PropertiesToLoad.Add(ADProperty.Mobile); ser.PropertiesToLoad.Add(ADProperty.OtherTelephone); ser.PropertiesToLoad.Add(ADProperty.Name); ser.PropertiesToLoad.Add(ADProperty.Pager); ser.PropertiesToLoad.Add(ADProperty.OtherMobile); ser.PropertiesToLoad.Add(ADProperty.PhysicalDeliveryOfficeName); ser.PropertiesToLoad.Add(ADProperty.TitleEng); ser.PropertiesToLoad.Add(ADProperty.TitleFre); ser.PropertiesToLoad.Add(ADProperty.OtherHomePhone); ser.PropertiesToLoad.Add(ADProperty.TelephoneAssistant); ser.PropertiesToLoad.Add(ADProperty.Mail); ser.Sort.PropertyName = ADProperty.DfaitEdsId; ser.Sort.Direction = SortDirection.Ascending; ser.PageSize = 1000; var returnValue = ser.FindAll(); Console.WriteLine("Total Records found = {0}", returnValue.Count); Console.WriteLine(); foreach (SearchResult res in returnValue) { var found = GetMultiValue(res, ADProperty.DistinguishedName); if (found != null & found.Length > 0) { Console.WriteLine(found[0]); } } } public static string[] GetMultiValue(SearchResult result, string fieldName) { string[] returnValue = null; if (result != null) { if (result.Properties.Contains(fieldName)) { ResultPropertyValueCollection propertyValue = result.Properties[fieldName]; if (propertyValue != null) { if (propertyValue.Count > 1) { string[] valueArray = new string[propertyValue.Count]; for (int i = 0; i < propertyValue.Count; i++) { string valStr = propertyValue[i].ToString(); valueArray[i] = valStr; } returnValue = valueArray; } else if (propertyValue.Count == 1) { string[] tempString = new string[] { propertyValue[0].ToString() }; returnValue = tempString; } else { string[] tempString = new string[] { }; returnValue = tempString; } } } } return returnValue; } 

对于上面的测试示例,我注释掉了排序并且它有效。

对于我的主要应用程序,我仍然收到错误。

看起来这篇文章仍适用于.net 4.0此错误消息。

http://blogs.dirteam.com/blogs/tomek/archive/2006/11/09/More-data-is-available-exception-when-searching-with-S.DS.aspx

   

一旦开始为您的请求提供太多结果,就会出现此错误。
虽然这似乎没有得到很好的记录,但是即使启用了分页findall可以处理的对象数量显然有限制。

一种方法是切换到较低级别的访问并使用System.DirectoryServices.Protocols而不是分页。
您可以使用此处提供的代码: http : //dunnry.com/blog/PagingInSystemDirectoryServicesProtocols.aspx

另一个选择似乎是使用KB 833879的工作并激活waitForPagedSearchData选项。 但是,正如您在答案中所描述的那样,在所有情况下显然都无法解决问题。 但请确保您为此实际使用的DirectoryServices版本设置了选项,如下所述: https : //dirteam.com/tomek/2006/11/09/more-data-is-available-exception-when-搜索与- S-DS /