ASP.netをVS2008(言語はVB)で開発しています。ローカル(WinXP)ではAD情報が取得できるのに、
WindowsServer2008(IIS7.0)上で実行したらエラーになりました。
エラー内容:「操作エラーが発生しました」
場所 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
-------------------------------------
コード:
Dim nameCheck As String = System.Security.Principal.WindowsIdentity.GetCurrent.Name.ToString()
Dim serverPath As String = "LDAP://servername/DC=hogehoge,DC=local"
Dim entry As New System.DirectoryServices.DirectoryEntry(serverPath)
'ログオンユーザーを変数へ代入
Dim lgUser As String = Environment.UserName
Dim search As New System.DirectoryServices.DirectorySearcher()
' 検索のルートになるDirectoryEntryを指定
search.SearchRoot = entry
' 検索条件を指定します。下ではアカウント名と変数lgUserの一致が条件
search.Filter = "(samAccountName=" + lgUser + ")"
Dim result As System.DirectoryServices.SearchResult
result = search.FindOne
-------------------------------------
この↑FindOneでエラーになります。
lgUserにはユーザーID、
nameCheckにも、ドメイン名/ユーザーIDで、予定通りの値が取得出来ていることを確認しています
(※nameCheckはコード上必要ありませんが
思った通りの動きをしているか確認のため取得し、エラー時に表示して確認しました)
IIS7.0上では、IISマネージャを使用して、
「認証」で
・ASP.NET偽装
・Windows認証
を有効とし、他(フォーム認証、基本認証、匿名認証)はすべて無効にしています
lgUserにセットされる値はIDなので、
AD情報から、該当する人の名前と、メールアドレスを取得したいです。
(イントラネット上でデフォルト表示に使用します)
IIS7.0上で、ADに接続できるような設定が必要なのかな?と思っているのですが
具体的にどこをどうしたらよいのかわからず、途方に暮れています
こちらの情報が少ないようでしたら追加致します。
もう3日くらい詰まっているので、ヒントだけでも教えていただけると助かります。
よろしくお願いいたします。
お礼
早速の回答ありがとうございます! 別件でトラブルがあって、回答遅くなり、申し訳ありません。 下記手順で出来ました! 1.アプリケーションプールのIDがNetworkServiceだったので、ドメインのユーザーに変更。 2.ASP.NET偽装を無効。 3.操作者のユーザIDはMy.User.Nameで取得(¥を検索してユーザIDだけ取り出し) AD内オブジェクトの検索をするときに、アプリケーションプールのIDを使わず、 Windows認証で取得したユーザー名(My.User.Name)で見てくれればいいのに...と思いましたが パスワードの情報がないからNG...という認識は合っているのでしょうか?? 「コーディングで偽装」をまだ試していないのですが http://support.microsoft.com/kb/306158/ja#3 ↑このあたりを参考にもう少しがんばってみようと思います とりあえず教えていただいた一つの方法で実現できたので大変助かりました! ありがとうございました<(_ _)>