4

以下のコードを使用して、ユーザーが Web サイトにログオンしたときに Active Directory の情報を検索しています。ローカル ドメインに対して実行すると非常に高速ですが、VPN 経由でリモートの信頼できるドメインに対して実行すると、非常に遅くなります (約 7 ~ 8 秒かかります)。同じボックスからリモート ドメインに対して dsa.msc を実行すると、ローカルで実行するのとほぼ同じ速さで実行できます。

可能な限り最小限のデータを取得するためにプロパティ フィルタリングを使用しているため、このシナリオで System.DirectoryServices について本質的に遅いものがありますか、またはパフォーマンスを向上させる方法について何かヒントはありますか?

VPN 経由のネットワーク接続は問題ありません。実行速度が遅いのはこのコードだけです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var LDAPConnection = new DirectoryEntry("LDAP://domain/dc=domain,dc=com", "username", "password"))
            {
                LDAPConnection.AuthenticationType = AuthenticationTypes.Secure;
                using (DirectorySearcher Searcher = new DirectorySearcher(LDAPConnection))
                {
                    Searcher.Filter = "(&(&(objectclass=user)(objectcategory=person))sAMAccountName=username)";
                    Searcher.PropertiesToLoad.Add("mail");

                    SearchResult result = Searcher.FindOne(); //this line takes ages!

                    string EmailAddress = result.Properties["mail"][0].ToString();
                    Console.WriteLine(EmailAddress);
                }
            }
        }
    }
}
4

2 に答える 2

1

あなたが説明しているシナリオ(VPN経由でActive Directoryに接続する)を試したことはありませんが、あなたがマークした行は、接続を開く原因となる行です. FindOne を呼び出す前に、サーバーに接続していません。私の推測では、接続の確立には 7 ~ 8 秒かかります。

stackoverflow で正確な答えが見つからない場合は、次のフォーラムを試してください: http://directoryprogramming.net/forums/default.aspx (stackoverflow が役に立たないと言っているわけではありませんが、DirectoryProgramming に関する私の ad/ldap の質問に対するいくつかの答えを見つけました。 .net フォーラム)。

于 2009-12-04T12:06:01.720 に答える