【发布时间】:2023-03-20 19:57:01
【问题描述】:
我在下面有以下代码。每次调用 directoryEntryGroupMembers.Properties["member"]; 时,它都会返回相同的列表。结果,while循环陷入了无限循环。我怀疑组在 AD 本身而不是代码中的设置方式存在问题。有谁知道如何解决这个问题?
注意:我知道我们的 AD 中有循环嵌套组,但这直到现在还没有引起问题。所以,我不知道循环组嵌套是否是问题。
string strDirectoryEntryPath = null;
const int intIncrement = 1500; // https://msdn.microsoft.com/en-us/library/windows/desktop/ms676302(v=vs.85).aspx
string strDsFilter = null;
string[] strDsProperties = null;
List<Guid> lstGroupMemberGuid = null;
DataTypeConverter objConverter = null;
DirectoryEntry directoryEntryGroupMembers = null;
SearchResultCollection searchResultCollection = null;
DirectorySearcher directorySearcher = null;
objConverter = new DataTypeConverter();
lstGroupMemberGuid = new List<Guid>();
strDirectoryEntryPath = strActiveDirectoryHost + "/<GUID=" + strPropertyValue + ">";
directoryEntryGroupMembers = new DirectoryEntry(strDirectoryEntryPath, null, null, AuthenticationTypes.Secure);
while (true)
{
intCountIteration = intCountIteration + 1;
var varGroupMemberDns = directoryEntryGroupMembers.Properties["member"];
foreach(string strMemberDn in varGroupMemberDns)
{
if (dctObjectGuidDn.TryGetValue(strMemberDn, out Guid gidMemberGuid))
{
lstGroupMemberGuid.Add(gidMemberGuid);
}
}
if (varGroupMemberDns.Count < intIncrement)
{
break;
}
directoryEntryGroupMembers.RefreshCache(new[] { string.Format("member;range={0}-*", lstGroupMemberGuid.Count) });
}
【问题讨论】:
-
为什么要增加
if比较中未使用的变量? -
@devlincarnate 用于测试。我想看看同一个列表有多少次回来。
-
那么
intIncrement是什么,它在哪里发生了变化? -
@devlincarnate 我显然发布了太少的代码。我已经更新了我的帖子。
intIncrement与 Active Directory 中的限制相关联。 -
好的,所以它是一个静态变量,这意味着
varGroupMemberDns.Count应该改变。你有没有通过这个循环几次来验证它的价值确实下降了?
标签: c# while-loop active-directory infinite-loop