アプリケーション ドメインの外部でUserPrincipal
(およびGroupPrincipal
)を実行するアプリケーションがあります。FindByIdentityWithType
これは先週まで機能していました。それ以来、開発マシンに Visual Studio 2012 をインストールしたところ、PrincipalOperationException
{"ドメインに関する情報を取得できませんでした (1355)"} でコードが動作しなくなりました。Windows エラー番号は 80131501 です
VS2012 のインストール、何らかのセキュリティ アップデート、およびこのエラーの出現の間に相関関係があるかどうかはわかりません。
コンテキストの作成時に SimpleBind を使用し、ADSIEdit で同じ設定を使用してドメインにアクセスすることは引き続き機能します。
アプリケーションのテスト中に WireShark をキャプチャしたところ、TCP/LDAP パッケージは成功を示しています。LDAP 検索結果パケットを受け取り、wireshark でその内容が正しいことを確認できます。wireshark で searchRequest と searchResponse を確認できます。要求の値は正しく、要求は正しいディレクトリ オブジェクトで応答されます。クライアントと 2008R2 サーバー間の LDAP トラフィックでポートが変更されていることがわかります。クライアントは Windows7 です (ファイアウォールをオンにしておらず、ウイルス スキャナーを無効にしてみました)。
後で System.DirectoryServices.AccountManagement が UserPrincipal をインスタンス化するときに問題が発生する可能性があると思います (UserPrincipalEx プロパティの一部が例外の理由である可能性があるので、これを試しました)。この推測は、ldap クエリが実行され、正常に応答されるという事実に基づいています。
MemberOf
クライアントがそのドメインに対して信頼されていない場合、DirectoryObject のようなメソッドを実行できないことはわかっています。しかし、 UserPrincipal の単純なインスタンス化は、今日まで何ヶ月もの間うまくいきました。
私の開発環境では、DNS の代わりにホスト エントリを使用しています。それは何ヶ月も働きました。サーバーはクライアントの DNS 情報を持っておらず、決して持っていませんでした。
解決策へのヒントは素晴らしいでしょう!
ホスト エントリ:
192.168.19.101 mhvtest.loc #thats the domain (local vmware) entry
192.168.19.101 mhvdc1.mhvtest.loc #thats the domain controller entry
192.168.19.102 mhvex1.mhvtest.loc
スタックトレースは次のとおりです。
at System.DirectoryServices.AccountManagement.Utils.GetDcName(String computerName, String domainName, String siteName, Int32 flags)
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo()
at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName()
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetAsPrincipal(Object storeObject, Object discriminant)
at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper(Type principalType, String urnScheme, String urnValue, DateTime referenceDate, Boolean useSidHistory)
at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRef(Type principalType, String urnScheme, String urnValue, DateTime referenceDate)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, String identityValue)
at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue)
at Idda2.ActiveDirectory.UserPrincipalEx.FindByIdentity(PrincipalContext context, String identityValue) in D:\Users\vogt\Documents\src\idda2\trunk\Idda2.ActiveDirectory\UserPrincipalEx.cs:line 130