如何在使用C#在Active Directory中搜索时消除DirectoryServicesCOMException?

如何在使用C#在Active Directory中搜索时消除DirectoryServicesCOMException?,c#,active-directory,C#,Active Directory,我知道如何使用C#和System.DirectoryService从Active Directory获取数据。我这里有一个样本: var rootEntry = new DirectoryEntry("LDAP://mydomain.local", "UserName", "Password"); var searcher = new DirectorySearcher(rootentry); searcher.CacheResults

我知道如何使用C#和
System.DirectoryService
从Active Directory获取数据。我这里有一个样本:

var rootEntry = new DirectoryEntry("LDAP://mydomain.local", "UserName", "Password");
var searcher = new DirectorySearcher(rootentry);
searcher.CacheResults = false;
searcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
searcher.PageSize = 1000;
searcher.Filter = "Some LDAP Query";
searcher.PropertiesToLoad.AddRange(new[] { "objectguid", "name", "objectclass" });
var result = searcher.FindAll();
var enumerator = result.GetEnumerator();
while (enumerator.MoveNext())  // THIS LINE THROWS AN EXCEPTION
{
   // Do my work here
}
但是,
enumerator.MoveNext()
在大多数情况下抛出异常,但并非每次都抛出异常。有关例外情况的详情如下:

System.DirectoryServices.DirectoryServicesCOMException(0x8007202C):服务器不支持请求的关键扩展

在System.DirectoryServices.SearchResultCollection.ResultsEnumerator.MoveNext()中

不幸的是,我无法计算抛出异常的条件。请帮帮我如何消除此异常?

提前感谢

附言:我看过下面的文章,但这些并没有回答我的特定问题

我不是Active Directory专家,所以请不要假设我有任何知识。谢谢

我正在尝试执行以下LDAP查询:

(&(!cn=SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9})(!cn=SystemMailbox{1f05a927-f7a0-4bff-ba0e-7400efadb1d7})(!cn=FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042)(!cn=DiscoverySearchMailbox{D919BA05-46A6-415f-80AD-7E09334BB852})(!cn=SystemMailbox{1f05a927-fb80-4c7c-8a53-b072e381d13a})(!cn=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c})(!cn=Migration.8f3e7716-2011-43e4-96b1-aba62d229136)(!cn=SystemMailbox{1f05a927-594f-4c55-a9ca-99486880acb5})(!cn=SystemMailbox{1f05a927-1b66-4473-9aec-cf049b8cef3d})(!cn=SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201})(!cn=SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA})(!cn=SystemMailbox{1f05a927-9350-4efe-a823-5529c2d64109})(!cn=SystemMailbox{1f05a927-c92b-414e-aeb0-1256cedb2cfb})(!cn=SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9})(!cn=SystemMailbox{1f05a927-eac1-46e7-9a47-611e1a81bb50})(!cn=SystemMailbox{1f05a927*)(|(&(objectClass=user)(objectCategory=person))(objectClass=group)(&(objectClass=contact)(objectCategory=person))(&(objectClass=publicFolder)(objectCategory=publicFolder))(&(objectClass=computer)(objectCategory=computer))(objectCategory=container)(objectCategory=domain)(objectCategory=organizationalUnit))(!name=System)(!name=Microsoft Exchange System Objects)(!name=ForeignSecurityPrincipals))

为什么不像在
foreach(SearchResult r in result){…}
中那样使用foreach循环进行迭代呢?@Theo既然foreach循环将在可枚举项上编译为相同的
MoveNext
,为什么会有什么不同呢?您尝试过了吗?仍然有错误吗?@Theo是的,我试过了,正如预期的那样,它在foreach循环中给出了相同的错误。@Theo现在我找到了一种重现问题的方法。实际上,我正在处理一个包含数亿个对象的环境。但是,为了在小型环境中模拟此问题(但包含1000个以上的对象),请执行以下操作:-在foreach内的第一行插入断点-暂停(即,不要跨过)30分钟-继续!多田!!!!!同样的异常,所以它看起来像是某种会话问题,但我不知道如何解决这个问题。文档中没有提到任何有关此问题的内容。