ユーザーの資格情報を確認するために使用される小さなC#ソリューションがあります。チームメイトの2人にとっては問題なく動作しますが、PCでは例外が発生します。
関連するコード:
PrincipalContext context = new PrincipalContext(ContextType.Domain);
if (context.ValidateCredentials(System.Environment.UserDomainName + "\\" + usr, pwd))
return true;
else
return false;
そして例外は:
DirectoryOperationException、「サーバーはディレクトリ要求を処理できません。」.
明示的なサーバー名と636ポート番号を使用してコンテキストを作成しようとしましたが、これも役に立ちませんでした。
何か案は?
私はこの問題を抱えていました:物事は私の開発マシンでは機能していましたが、サーバーでは機能しませんでした。サーバー上のIISはLocalMachineとして実行するように設定されていることが判明しました。これをNetworkService(デフォルト)に変更すると、動作が開始されました。
したがって、これがIISで実行されているかどうかは、基本的にアプリプールのユーザーを確認してください。
IIS ExpressとVS2010を使用しても、この問題が発生しました。問題を解決したのは、別のスレッドへのコメントでした。
Active Directoryに対してユーザー名とパスワードを検証しますか?
しかし、クリックと検索を節約します...:)ContextOpations.Negotiateを追加するだけです。以下のように資格情報の検証呼び出しを行います。
bool valid = context.ValidateCredentials(user, pass, ***ContextOptions.Negotiate***);
新しいアプリプールを作成して.NET2.0を割り当ててから、新しいアプリプールをWebアプリに割り当てるだけで、機能し始めました。 .NET 3.5 SP2があったため、修正プログラムは私たちにとって理想的ではありませんでした。 WWWサービスは通常ローカルシステムなので、私もそれについて質問しました。しかし、それは.NETとセキュリティに関連していたので、最初にアプリプールを試してみたところ、うまくいきました。
おそらく、修正プログラムが必要ですか?
そして、あなたは管理者ですか、それともサービスが実行されているIDはPCの管理者ですか?
私はあなたがすでにこれを調べたと思います:
"役に立たないDirectoryOperationException("サーバーはディレクトリ要求を処理できません。 ")を受け取る場合があります。これについてそれほど面白くないのは、通信を試みさえしなかったことです。サーバー。解決策は、サーバーにポート番号を追加することでした。したがって、「Server」を渡してLdapConnectionを開く代わりに、「server:636」を渡しました。ちなみに、LDAPSはポート636であり、によって使用される389ポートではありません。 LDAP。 "
良い点ですが、Win7/.NET3.5にそのパッチが必要になるとは思いません。この質問で提供される情報はどうですか?