Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在组上检索组成员的Active Directory似乎陷入无限循环_C#_While Loop_Active Directory_Infinite Loop - Fatal编程技术网

C# 在组上检索组成员的Active Directory似乎陷入无限循环

C# 在组上检索组成员的Active Directory似乎陷入无限循环,c#,while-loop,active-directory,infinite-loop,C#,While Loop,Active Directory,Infinite Loop,我有下面的代码。每次directoryEntryGroupMembers.Properties[“member”]时,返回相同的列表。结果,while循环卡在无限循环中。我怀疑与代码相反,在AD中如何设置组存在问题。有人知道如何解决这个问题吗 注意:我知道我们的广告中有循环嵌套组,但直到现在还没有引起问题。因此,我不知道循环组嵌套是否是问题所在 string strDirectoryEntryPath = null; const int intIncrement = 1500; // https

我有下面的代码。每次
directoryEntryGroupMembers.Properties[“member”]时,返回相同的列表。结果,while循环卡在无限循环中。我怀疑与代码相反,在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) });
}
string strDirectoryEntryPath=null;
常数int增量=1500;//https://msdn.microsoft.com/en-us/library/windows/desktop/ms676302(v=vs.85).aspx
字符串strDsFilter=null;
字符串[]strDsProperties=null;
列表lstGroupMemberGuid=null;
DataTypeConverter objConverter=null;
DirectoryEntry directoryEntryGroupMembers=null;
SearchResultCollection SearchResultCollection=null;
DirectorySearcher DirectorySearcher=null;
objConverter=新数据类型转换器();
lstGroupMemberGuid=新列表();
strDirectoryEntryPath=StrActiviteDirectoryHost+“/”;
directoryEntryGroupMembers=new DirectoryEntry(strDirectoryEntryPath,null,null,AuthenticationTypes.Secure);
while(true)
{
intCountIteration=intCountIteration+1;
var varGroupMemberDns=directoryEntryGroupMembers.Properties[“member”];
foreach(varGroupMemberDns中的字符串strmembernd)
{
if(dctObjectGuidDn.TryGetValue(strMemberDn,out Guid gidMemberGuid))
{
lstGroupMemberGuid.Add(gidMemberGuid);
}
}
if(varGroupMemberDns.Count
问题在于
varGroupMemberDns.Count
没有减少,也不应该减少。我相信您可能希望在循环之前捕获计数,然后在每次迭代中减少该计数

var recordCount = varGroupMemberDns.Count;
while (true)
{
recordCount--;
...
  if (recordCount < intIncrement)
  {

  }
  ...
}
var recordCount=varGroupMemberDns.Count;
while(true)
{
记录计数--;
...
if(记录计数<增量)
{
}
...
}

if
比较中未使用的变量为什么要递增?@devlentinate进行测试。我想看看同一个列表出现了多少次。那么什么是
intIncrement
,它在哪里发生了变化?@develiminate我显然发布的代码太少了。我已经更新了我的帖子。
intIncrement
与Active Directory.ok中的限制绑定,因此它是一个静态变量,这意味着
varGroupMemberDns.Count
应该更改。您是否已经对该循环进行了几次验证,以验证其值是否确实降低了?不需要循环增量。从逻辑上讲,循环以1500个批次运行。如果当前批次的计数小于1500,则处理完成,无需刷新缓存。随着工作的完成,问题已经解决了。因此,在AD中进行了更改,然后进行了更正。感谢您参与尝试并帮助+1。