まず、私は Active Directory の初心者であり、サーバーの構成を処理するのは私ではありません (これが実際にサーバー関連の問題である場合)。ただし、適切なアドバイスがあれば、そのアドバイスを適切な人に伝えることができます。
大規模な ASP.NET C# .NET 3.5 アプリケーションを実行しています。
私たちが遭遇しているシーンは次のとおりです。
グローバル カタログの AD 検索をテストするためのテスト ページを作成しました。
テスト サーバー 1 からは、次のようになります。
GC://TEST.COM:3268 (セキュリティで保護されていない) を使用 -> 優れたパフォーマンス。
G:C//TEST.COM:3269 (セキュア) を使用 -> 優れたパフォーマンス
テスト サーバー 2 から:
GC://TEST.COM:3268 (セキュリティで保護されていない) を使用 -> 優れたパフォーマンス。
G:C//TEST.COM:3269 (セキュア) を使用 -> 失敗します。
私が見る唯一の例外は次のとおりです。例外:「サーバーは動作していません」
両方のテスト サーバーが同じコードを実行しているため、コードの問題ではないと思います。問題が発生するのは、テスト サーバー 2 から GC のセキュア ポートに接続しようとしたときだけです。
サーバーで実行しようとしたときの例外情報は次のとおりです。例外をログテーブルにダンプしています。
Directory Services Com Exception (Exception Message) : サーバーが動作していません。エラーコード: -2147016646 スタックトレース:
System.DirectoryServices.DirectoryEntry.Bind (ブール値 throwIfFail) で
System.DirectoryServices.DirectoryEntry.Bind() で System.DirectoryServices.DirectoryEntry.get_AdsObject() で
System.DirectoryServices.DirectorySearcher.FindAll (ブール値の findMoreThanOne) で
System.DirectoryServices.DirectorySearcher.FindOne() で TestClass.GetUserDomainTest (文字列ユーザー名) で
testclass.aspx.cs:155行目
私が言ったように、それがコードの問題だとは思いませんが、コードが役立つ場合はコードを同封しました:
private string GetUserDomain2(string UserName)
{
string domainName = String.Empty;
try
{
// This is Test page code so we can change the values as we want
DirectoryEntry entry = new DirectoryEntry(txtGCPath.Text)
entry.Username = txtGCUserID.Text;
entry.Password = txtGCPassword.Text;
// Set SSL or leave default
if (cb1.Checked == true)
{
entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
}
DirectorySearcher search = new DirectorySearcher();
search.SearchRoot = entry;
search.SearchScope = SearchScope.Subtree;
search.Filter = string.Format(txtGCFilter.Text, UserName);
SearchResult results = search.FindOne(); // CRASHES HERE
// Parsing code removed.
return domainName;
}