0

我有一个通过端点与 Active Directory 服务器对话的 asp .net 程序。我正在执行三个操作。GetAllActiveDirectoryUsers()、GetAllActiveDirectoryGroups()、SaveUserToGroupMapping()

在 GetAllActiveDirectoryUsers() 中,我从 AD 中提取所有 UserPrincipal 对象并将该信息填充到数据库表中。工作正常

在GetAllActiveDirectoryGroups () 中,我从 AD 中提取所有 GroupPrincipal 对象并将该信息填充到数据库表中

在 SaveUserToGroupMapping() 中获取所有 userPrincipal 对象,对于每个用户主体,我找到了一个 UserPrincipal.GetGroups()。几乎有 6500 个用户主体对象,为每个用户主体对象执行一个组主体有点费时。拉取所有 userprincipal 和 userPrincipal.GetGroup() 大约需要 65 分钟。 突然中断

foreach(myADUserPrincipalResults 中的 UserPrincipal userPrincipal)
{
  foreach(userPrincipal.GetGroups() 中的 GroupPrincipal groupPrincipal)
  {
    //使用 groupPrincipal 构建我的自定义 C# 对象
  }
}

我的 Web 应用程序部署在 Web 服务器框上,上面显示的用户主体和组主体上的代码片段位于应用服务器框中。它是调用 Active Directory 服务器的应用服务器。Web 应用程序只需单击一个按钮即可启动顺序代码执行。

我尝试在此代码周围捕获异常。此代码适用于一定数量的用户,但突然抛出异常,如下所示: 这是来自 Web 服务器的异常日志。我在应用服务器上看不到任何异常日志。

System.Net.WebException:基础连接已关闭:接收时发生意外错误。---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭
   在 System.Net.Sockets.NetworkStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)
   --- 内部异常堆栈跟踪结束 ---
   在 System.Net.Sockets.NetworkStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)
   在 System.Net.PooledStream.Read(字节 [] 缓冲区,Int32 偏移量,Int32 大小)
   在 System.Net.Connection.SyncRead(HttpWebRequest 请求,布尔 userRetrievedStream,布尔 probeRead)
   --- 内部异常堆栈跟踪结束 ---

我不确定问题出在哪里。是因为 AD 服务器还是 Web 服务器或应用服务器。关键是我写了其他日志,以了解代码执行成功的程度,我看到代码片段中的循环在一段时间内工作正常,比如一小时,然后突然失败。

非常感谢调试此问题或分析问题所在的任何帮助?

4

0 回答 0