私たちは、ユーザーがイントラネット上の Web アプリケーションを介してアカウントのパスワードを変更できるようにするシステムを作成しています。
最初は、すべてが順調に進んでいるように見えました。開発中、テスト アカウントのパスワードは問題なく変更できました。
しかし、システムを稼働させたとき、問題が発生し始めました。症状は次のとおりです。
- 最初は、すべて問題ありません。ユーザーはパスワードを変更できます。
- ある時点で、UserPrincipal.FindByIdentity で次のエラーが発生します:「System.Runtime.InteropServices.COMException: 認証メカニズムが不明です。」
- それ以降、Web アプリケーションを介してパスワードを変更しようとすると、「System.Runtime.InteropServices.COMException: サーバーが動作していません。」というエラーが発生します。
- アプリ プールを手動でリサイクルすると、さらにエラーが発生し始めるまで、すべてが自動的に修正されるように見えます。つまり、プロセスはフェーズ 1 から最初からやり直されます。
関連するコードのスニペットは次のとおりです。
private static PrincipalContext CreateManagementContext() {
return new PrincipalContext(
ContextType.Domain,
ActiveDirectoryDomain,
ActiveDirectoryManagementAccountName,
ActiveDirectoryManagementAccountPassword);
}
private static void ChangeActiveDirectoryPasword(string username, string password) {
if (username == null) throw new ArgumentNullException("username");
if (password == null) throw new ArgumentNullException("password");
using (var context = CreateManagementContext())
using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username)) {
user.SetPassword(password);
}
}
なぜこれが起こっているのかについての手がかりはありますか?Google 検索は本当に役立つものを見つけられず、MSDN のドキュメントもそうではありません。