エンドポイントを介して Active Directory サーバーと通信する asp .net プログラムがあります。3つの手術を行っています。GetAllActiveDirectoryUsers()、GetAllActiveDirectoryGroups()、SaveUserToGroupMapping()
GetAllActiveDirectoryUsers() では、すべての UserPrincipal オブジェクトを AD から取得し、その情報をデータベース テーブルに入力しています。正常に動作します
GetAllActiveDirectoryGroups() では、すべての GroupPrincipal オブジェクトを AD から取得し、その情報をデータベース テーブルに入力しています。
SaveUserToGroupMapping() では、すべての userPrincipal オブジェクトを取得しており、ユーザー プリンシパルごとに UserPrincipal.GetGroups() を見つけています。ほぼ 6500 のユーザー プリンシパル オブジェクトがあり、各 userPrincipal オブジェクトに対してグループ プリンシパルを実行するには、ある程度の時間がかかります。すべての userprincipal と userPrincipal.GetGroup() を取得するには、約 65 分かかります。 突然壊れる
foreach (myADUserPrincipalResults の UserPrincipal userPrincipal) { foreach (UserPrincipal.GetGroups() の GroupPrincipal groupPrincipal) { // groupPrincipal を使用してカスタム C# オブジェクトを構築する } }
私の Web アプリケーションは Web サーバー ボックスにデプロイされ、上記のユーザー プリンシパルとグループ プリンシパルのコード スニペットはアプリ サーバー ボックスにあります。Active Directory サーバーを呼び出すアプリケーション サーバーです。Web アプリケーションには、クリックするボタンが 1 つあるだけで、順次コードが実行されます。
このコードの周りで例外をキャッチしてみました。このコードは、特定の数のユーザーに対しては正常に機能し、突然、以下に示すように例外をスローします: これは、Web サーバーからの例外ログです。アプリ サーバーに例外ログがありません。
System.Net.WebException: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。---> System.IO.IOException: トランスポート接続からデータを読み取ることができません: 既存の接続がリモート ホストによって強制的に閉じられました。---> System.Net.Sockets.SocketException: 既存の接続がリモート ホストによって強制的に閉じられました System.Net.Sockets.NetworkStream.Read (Byte[] バッファー、Int32 オフセット、Int32 サイズ) で --- 内部例外スタック トレースの終了 --- System.Net.Sockets.NetworkStream.Read (Byte[] バッファー、Int32 オフセット、Int32 サイズ) で System.Net.PooledStream.Read (Byte[] バッファー、Int32 オフセット、Int32 サイズ) で System.Net.Connection.SyncRead (HttpWebRequest 要求、ブール値の userRetrievedStream、ブール値の probeRead) で --- 内部例外スタック トレースの終了 ---
どこに問題があるのか わかりません。ADサーバーまたはWebサーバーまたはアプリサーバーが原因ですか。ポイントは、コードの実行がどの程度成功したかを知るために他のログを書いていることです。コード スニペットのループが 1 時間ほど正常に動作し、その後突然失敗することがわかります。
これをデバッグしたり、問題が何であるかを分析したりするのに何か助けていただければ幸いです。