使用ASP.NET WebAPI C#获取AD组在Windows Server 2016数据中心上不起作用

问题描述 投票:0回答:2

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

这是开发人员的工作。 PC(Windows 10),Testserver和旧的生产服务器(Windows Server 2012 R2)但是在新的生产服务器(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

有人有一个主意,可能是什么问题?谢谢

添加:2020年1月8日16:11(UTC +1)

说明:在执行当前的Web请求。请查看堆栈跟踪以获取更多信息有关错误及其在代码中起源的信息。

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

源错误:

[未执行的异常是在执行当前的Web请求。有关原产地和位置的信息可以使用下面的异常堆栈跟踪来标识异常。

堆栈跟踪:

[COMException(0x800703fa):尝试对注册表进行非法操作已标记为删除的密钥。 ]System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)+535System.DirectoryServices.DirectoryEntry.Bind()+48System.DirectoryServices.DirectoryEntry.get_AdsObject()+43System.DirectoryServices.PropertyValueCollection.PopulateList()+27System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry条目,字符串propertyName)+122System.DirectoryServices.PropertyCollection.get_Item(字符串propertyName)+168System.DirectoryServices.DirectoryEntry.Bind(布尔throwIfFail)+194System.DirectoryServices.DirectoryEntry.Bind()+48System.DirectoryServices.DirectoryEntry.get_AdsObject()+43System.DirectoryServices.DirectorySearcher.FindAll(布尔findMoreThanOne)+91System.DirectoryServices.DirectorySearcher.FindOne()+46FragranceStudio.Webservice.Common.Helper.ActiveDirectoryHelper.SetADInformationToFragranceStudioPrincipal(FragranceStudioPrincipalaromaStudioPrincipal)中C:\ Repositories \ VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice.Common \ Helper \ ActiveDirectoryHelper.cs:70FragranceStudio.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:169FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.GetInheritedGroups(FragranceStudioPrincipal本金)C:\ Repositories \ VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice.Common.Security \ ExtendedPermissionProvider.cs:62FragranceStudio.Webservice.Common.DomainEntities.Security.FragranceStudioPrincipal..ctor(IExtendedPermissionProviderextendedPermissionProvider,WindowsPrincipal主体)C:\ Repositories \ VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice.Common \ DomainEntities \ Security \ FragranceStudioPrincipal.cs:55FragranceStudio.Webservice.WebApiApplication.Application_PostAuthenticateRequest(Object发送者,EventArgs e)在C:\ Repositories \ VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice \ Global.asax.cs:51System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+223 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)+220 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值和已同步完成)+94

c# asp.net-web-api active-directory windows-server-2016 principalsearcher
2个回答
0
投票

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

enter image description here


0
投票

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

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

[This answer和对this answer的评论确认。

我不太确定为什么会在不打开该异常的情况下抛出此异常,以及为什么只有2个辅助进程。我也很好奇。当它不是用户自己的注册表配置单元时,它可能与给该进程的注册表配置单元有关,而当一个工作进程关闭时,该配置单元被关闭,从而阻止了对另一个进程的访问。只是一个猜测。

© www.soinside.com 2019 - 2024. All rights reserved.