私は、AD認証に大きく依存するASP.NETアプリケーションを持っています。私たちは最近、アプリケーションと同じソリューションで独自のソリューションに住んでいたサービスを突破しました。そのため、コードを変更する必要がある場合など、サービスに依存しているユーザーには影響しません。アプリケーションのUI側に影響を与えました。デバッグからのリモート呼び出しで失敗したADグループメンバーシップの取得
これは私にとっても面白い問題につながります。私がデバッグすると、アプリケーションのローカルコピーが、アプリケーションの環境コピーによっても使用されるサービスのリモートインスタンスを指しています。
System.Runtime.InteropServices.COMException(0x8007200A): 指定されたディレクトリサービス属性または値はありません - 私はローカルアプリ使用してユーザーのメンバーシップを認証しようとすると>リモートサービスコールを、それが次の例外で失敗します存在しない。
System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainerでSystem.DirectoryServices.DirectoryEntry.Bind System.DirectoryServices.DirectoryEntry.get_SchemaEntry()でSystem.DirectoryServices.DirectoryEntry.Bindで(ブール throwIfFail)()
でSystem.DirectoryServices.AccountManagement.ADStoreCtx..ctor(DirectoryEntryを ctxBase、ブールownCtxBase、文字列名、文字列のパスワード、 ContextOptionsオプション)で(DirectoryEntryを デ) System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntryを エントリで) System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer() System.DirectoryServices.AccountManagement.PrincipalContextでSystem.DirectoryServices.AccountManagement.PrincipalContext.Initialize() でSystem.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() で System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelperで.get_QueryCtx() (PrincipalContext コンテキスト、タイプprincipalType、Nullable`1たIdentityType、文字列 identityValue、日時refDate) System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentityで(PrincipalContext コンテキスト、String identityValue) *********************************。**** **************。IsUserMemberOfGroup(文字列ユーザ名、グループ名の文字列)
私がヒットするWebブラウザを使用して、同じグループ内で同じユーザーを認証しようとしたが、
リモートボックスにあるアプリをクリックすると、リモートサービスが表示されます。私が使用しているコードは、やや単純です。私のマシンがどのように呼び出されているかとは関係がありますが、私がそれを試してみると、私は浸漬されます。
public static bool IsUserMemberOfGroup(string userName, string groupName)
{
try
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "XXX");
var user = GetUser(userName, ctx);
if (user == null)
{
Log4NetLogManager.LogError("Unable to find user " + userName);
return false;
}
// find the group in question
groupName = groupName.Replace("XXX\\", string.Empty);
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName);
if (group != null) return user.IsMemberOf(group);
Log4NetLogManager.LogError("Unable to find group " + groupName);
return false;
}
catch (Exception ex)
{
if (!ex.Message.Contains("Unknown error"))
{
Log4NetLogManager.LogException(string.Format("Error while checking if {0} is a member of {1}", userName, groupName), ex);
}
return false;
}
}
private static UserPrincipal GetUser(string userName, PrincipalContext ctx)
{
UserPrincipal user = null;
userName = userName.Replace("XXX\\", string.Empty);
try
{
user = UserPrincipal.FindByIdentity(ctx, userName);
}
catch
{
}
return user ?? UserPrincipal.FindByIdentity(ctx, userName);
}
両方の環境で.configファイルを確認しましたか?違いは? – JCM
はい - 環境特有の違いのみです(つまり、電子メールの件名、ターゲット、ロギング場所など)。 – Marisa
これをチェックしましたか:http://stackoverflow.com/questions/29647024/the-specified-directory-service-attribute-or-value-does-not-exist? – JCM