2010-12-17 9 views
4

私は、ASP.NET Webアプリケーションのアクティブディレクトリに対してユーザーを認証するために、hereというソリューションを使用しています。私はFormsAuthenticationと共に使用される単純なADMembershipProviderクラスを作成しました。ローカルでプロジェクトを実行するときにうまく動作しますが、ネットワーク内のサーバーに展開すると、ValidateUserコールには実際には長時間(約20秒)かかります。 PrincipalContext.ValidateUserを使用する際のパフォーマンスの問題

//Assumes using System.DirectoryServices.AccountManagement 
public override bool ValidateUser(string username, string password) { 
    using (var context = new PrincipalContext(ContextType.Domain)) { 
     return context.ValidateCredentials(username, password); 
    } 
} 

私はPrincipalContextコンストラクタに msdnに記載されているよう コンテナパラメータを追加しようとしましたが、これらのパラメータは一切影響を与えていないようです。

using (var context = new PrincipalContext(ContextType.Domain, "MyDomain", "OU=MyCompany,DC=some,DC=stuff")) { 
    return context.ValidateCredentials(username, password); 
} 

私たちのネットワークでは、少なくとも2つの異なるサーバーで同じ問題が発生しています。サーバーがADに接続されており、OSが動作しているWindows 2003 SP2(IIS6)

この問題は、ユーザーの検証時に関与します。しかし、私たちが検証しようとしているユーザーは排他的に「私たちの」広告に存在します。

+0

あなたはIISUserまたはNetwork Serviceの下でサイト/アプリケーションプールを実行していますか? 後者の方が高速かもしれませんが、そのアカウントでサイトを実行することはお勧めしません。 – MarcelDevG

+0

ありがとう、サイトはすでにネットワークサービスとして実行中です –

+1

あなたがPrincipalContext()にNetBIOS名を渡しているためです。 DNSドメイン名を渡してみてください。 –

答えて

4

この問題に遭遇し、ValidateCredentials(string, string, ContextOptions)メソッドを使用して、適切な列挙型の組み合わせを渡して、私たちの環境でのActiveDirectory接続にアクセスする必要がありました。

関連する問題