以下のC#のプログラムで、最後にある「 foreach (Principal r in results) 」が実行された時に、「While trying to resolve a cross-store reference, the target principal could not be found in the domain indicated by the principal’s SID.」例外が発生する原因がどうにも分からず、マイクロソフトに聞いてみたら、回答を貰えました。
【例外が発生するソース】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using (Principal principal = GetPrincipal(searchSid, null)) { if (principal == null) return null; switch (principal.StructuralObjectClass) { case "group": using (GroupPrincipal gPrincipal = principal as GroupPrincipal) { using (PrincipalSearchResult results = gPrincipal.GetMembers()) { if (results == null) { return null; } foreach (Principal r in results) { |
【例外の内容】
e.Data=System.Collections.ListDictionaryInternal e.HelpLink=
e.InnerException= e.Message=While trying to resolve a cross-store reference, the target principal could not be found in the domain indicated by the principal’s SID.
e.Source=System.DirectoryServices.AccountManagement e.StackTrace=
at
System.DirectoryServices.AccountManagement.ADStoreCtx.ResolveCrossStoreRefToPrincipal(Object o)
at
System.DirectoryServices.AccountManagement.ADUtils.DirectoryEntryAsPrincipal(DirectoryEntryde, ADStoreCtx storeCtx)
at
System.DirectoryServices.AccountManagement.ADDNLinkedAttrSet.get_CurrentAsPrincipal()
at
System.DirectoryServices.AccountManagement.FindResultEnumerator`1.get_Current()
【Microsoftからの回答】
このエラーは、マルチドメイン環境で、ドメインサーバ間でユーザが重複していて、更にC#のPrincipalを使ってSIDの情報を取得してい ると発生します。
PrincipalクラスではなくDirectoryEntoryクラスを使うようにするか、ドメインサーバ間でユーザの重複を解消するか、どちらかの対策を行えば、このエラーは発生しなくなるはずです。
コメント