web-dev-qa-db-ja.com

.Netのディレクトリサービスが奇妙な例外をスローする

ユーザーの資格情報を確認するために使用される小さなC#ソリューションがあります。チームメイトの2人にとっては問題なく動作しますが、PCでは例外が発生します。

関連するコード:

PrincipalContext context = new PrincipalContext(ContextType.Domain);
if (context.ValidateCredentials(System.Environment.UserDomainName + "\\" + usr, pwd))
     return true;
else
     return false;

そして例外は:

DirectoryOperationException、「サーバーはディレクトリ要求を処理できません。」.

明示的なサーバー名と636ポート番号を使用してコンテキストを作成しようとしましたが、これも役に立ちませんでした。

何か案は?

24
Noich

私はこの問題を抱えていました:物事は私の開発マシンでは機能していましたが、サーバーでは機能しませんでした。サーバー上のIISはLocalMachineとして実行するように設定されていることが判明しました。これをNetworkService(デフォルト)に変更すると、動作が開始されました。

したがって、これがIISで実行されているかどうかは、基本的にアプリプールのユーザーを確認してください。

6
fredw

IIS ExpressとVS2010を使用しても、この問題が発生しました。問題を解決したのは、別のスレッドへのコメントでした。

Active Directoryに対してユーザー名とパスワードを検証しますか?

しかし、クリックと検索を節約します...:)ContextOpations.Negotiateを追加するだけです。以下のように資格情報の検証呼び出しを行います。

bool valid = context.ValidateCredentials(user, pass, ***ContextOptions.Negotiate***);
61
pwDev

新しいアプリプールを作成して.NET2.0を割り当ててから、新しいアプリプールをWebアプリに割り当てるだけで、機能し始めました。 .NET 3.5 SP2があったため、修正プログラムは私たちにとって理想的ではありませんでした。 WWWサービスは通常ローカルシステムなので、私もそれについて質問しました。しかし、それは.NETとセキュリティに関連していたので、最初にアプリプールを試してみたところ、うまくいきました。

2
Steve Bardocz

おそらく、修正プログラムが必要ですか?

そして、あなたは管理者ですか、それともサービスが実行されているIDはPCの管理者ですか?

私はあなたがすでにこれを調べたと思います:

"役に立たないDirectoryOperationException("サーバーはディレクトリ要求を処理できません。 ")を受け取る場合があります。これについてそれほど面白くないのは、通信を試みさえしなかったことです。サーバー。解決策は、サーバーにポート番号を追加することでした。したがって、「Server」を渡してLdapConnectionを開く代わりに、「server:636」を渡しました。ちなみに、LDAPSはポート636であり、によって使用される389ポートではありません。 LDAP。 "


良い点ですが、Win7/.NET3.5にそのパッチが必要になるとは思いません。この質問で提供される情報はどうですか?

1
JohnB