【问题标题】:Get AD Groups with ASP.NET WebAPI C# not working on Windows Server 2016 Datacenter使用 ASP.NET WebAPI C# 获取 AD 组在 Windows Server 2016 Datacenter 上不起作用
【发布时间】:2020-01-09 00:39:21
【问题描述】:

我有一个 ASP.NET Web API 应用程序,它将所有包含特定名称的组从 Active Directory 加载到内部数据库中。

这正在开发中。 PC (Windows 10)、Testserver 和旧的 Productive Server (Windows Server 2012 R2) 但在新的 Productive Server (Windows 2016) 上,同样的方法遇到了异常。

尝试对已标记为删除的注册表项进行非法操作。

这里是代码:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
var adGroups = srch.FindAll().Where(w => w.Name.Contains("_FS", StringComparison.InvariantCultureIgnoreCase));
var permissions = new List<PermissionGroup>();

// find all matches
foreach (var found in adGroups) {
    var permission = new PermissionGroup(found.Name, found.Sid.ToString());
    permissions.Add(permission);
}

其他信息: Windows Server 2016 数据中心 版本 10.0.14393 内部版本 14393

已安装 .NET Framework (Server 2016) .NET Framework 4.8 使用 .NET Framework 7

有人有一个想法,问题可能是什么? 谢谢

已添加:08.01.2020 16:11(UTC +1)

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.Runtime.InteropServices.COMException: 尝试对已标记为的注册表项进行非法操作 删除。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[COMException (0x800703fa): 试图对注册表进行非法操作 已标记为删除的键。 ]
System.DirectoryServices.DirectoryEntry.Bind(布尔 throwIfFail)+535 System.DirectoryServices.DirectoryEntry.Bind() +48
System.DirectoryServices.DirectoryEntry.get_AdsObject() +43
System.DirectoryServices.PropertyValueCollection.PopulateList() +27
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry 条目,字符串属性名称)+122
System.DirectoryServices.PropertyCollection.get_Item(字符串 物业名称) +168
System.DirectoryServices.DirectoryEntry.Bind(布尔 throwIfFail)+194 System.DirectoryServices.DirectoryEntry.Bind() +48
System.DirectoryServices.DirectoryEntry.get_AdsObject() +43
System.DirectoryServices.DirectorySearcher.FindAll(布尔 findMoreThanOne) +91
System.DirectoryServices.DirectorySearcher.FindOne() +46
FragranceStudio.Webservice.Common.Helper.ActiveDirectoryHelper.SetADInformationToFragranceStudioPrincipal(FragranceStudioPrincipal 香水工作室校长)在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common\Helper\ActiveDirectoryHelper.cs:70 FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.ReloadInheritedPermissionGroups(FragranceStudioPrincipal 校长)在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common.Security\ExtendedPermissionProvider.cs:142

[FragranceStudioException:发生未知错误。请试试 再次或联系服务台。]
FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.ReloadInheritedPermissionGroups(FragranceStudioPrincipal 校长)在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common.Security\ExtendedPermissionProvider.cs:169 FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.GetInheritedGroups(FragranceStudioPrincipal 校长)在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common.Security\ExtendedPermissionProvider.cs:62 FragranceStudio.Webservice.Common.DomainEntities.Security.FragranceStudioPrincipal..ctor(IExtendedPermissionProvider extendedPermissionProvider,WindowsPrincipal 主体)在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common\DomainEntities\Security\FragranceStudioPrincipal.cs:55 FragranceStudio.Webservice.WebApiApplication.Application_PostAuthenticateRequest(对象 发件人,EventArgs e) 在 C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice\Global.asax.cs:51 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +223 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤) +220 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously) +94

【问题讨论】:

  • 哪一行抛出异常?你能包括堆栈跟踪吗?
  • 我添加了显示的完整 Stacktrace

标签: c# asp.net-web-api active-directory windows-server-2016 principalsearcher


【解决方案1】:

阅读this article 告诉我这个问题与访问用户的个人资料有关。但是,您的应用程序池设置表明您甚至没有加载用户配置文件,这可能是您的问题的原因。

在您的应用程序池设置中,启用“加载用户配置文件”。

This answerthis answer 上的评论确认了这一点。

我不完全确定为什么它会抛出这个异常而不打开它,以及为什么只有 2 个工作进程。我也很好奇。当它不是用户自己的注册表配置单元时,它可能与向进程提供的注册表配置单元有关,并且在一个工作进程关闭时关闭,从而阻止访问另一个进程。只是猜测而已。

【讨论】:

  • 感谢您的解释,这就是问题所在。
【解决方案2】:

我发现了这个问题,但我不知道为什么会这样。 在最大工作进程上,设置为 2。 但是为什么这对 AD Query 来说是个问题呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2020-02-26
    • 2018-06-03
    • 1970-01-01
    • 2021-08-21
    • 2017-12-02
    • 2019-07-09
    • 2021-07-23
    相关资源
    最近更新 更多