Получение групп AD с помощью ASP.NET WebAPI C#, не работающего в Windows Server 2016 Datacenter

У меня есть приложение веб-API ASP.NET, которое загружает все группы, содержащие определенное имя, из Active Directory во внутреннюю базу данных.

Это работало над Dev. ПК (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);
}

Additional Information:Windows Server 2016 Datacenter Version 10.0.14393 Build 14393

Installed.NET Framework (Server 2016).NET Framework 4.8 Used.NET Framework 7

Someone have an idea, what the problem can be? Thanks

Added: 08.01.2020 16:11 (UTC +1)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Runtime.InteropServices.COMException: Illegal operation attempted on a registry key that has been marked for deletion.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[COMException (0x800703fa): Illegal operation attempted on a registry key that has been marked for deletion. ]
System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +535 System.DirectoryServices.DirectoryEntry.Bind() +48
System.DirectoryServices.DirectoryEntry.get_AdsObject() +43
System.DirectoryServices.PropertyValueCollection.PopulateList() +27
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +122
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +168
System.DirectoryServices.DirectoryEntry.Bind(Boolean 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.SetADInformationToFragrancePudio \ FragranceStudio\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common \ Helper \ ActiveDirectoryHelper.cs: 70 FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.ReloadInheritedPermissionGroups(субъект FragranceStudioPrincipal) в C:\Repositories\VS2017\FragrancePrincipalStudio\FragrancePermissionStudio\FragrancePerviceStudio\FragrancePowerStudio\FragranceProduct.cs: ​​142

[FragranceStudioException: произошла неизвестная ошибка. Повторите попытку или обратитесь в службу поддержки.]
FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.ReloadInheritedPermissionGroups(принципал FragranceStudioPrincipal) в C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common.Security.Permission.Studio. GetInheritedGroups(участник FragranceStudioPrincipal) в C:\Repositories\VS2017\FragranceStudio\FragranceStudio\FragranceStudio.Webservice.Common.Security\ExtendedPermissionProvider.cs: 62 FragranceStudio.Webservice.Common.DomainEntities.SecurityPrinderProvider.cs: 62 FragranceStudio.) в 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 \ FragraserviceStudio.WebApiApplication.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +223 System.Web.HttpApplication.ExecuteStepImpl(шаг IExecutionStep) +220 System.Web.HttpApplicationStepally, IExecutionStepously,Execute () +223 System.Web.HttpApplication.ExecuteStepImpl (шаг IExecutionStep) +220 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и выполнено синхронно) +94Execute () +223 System.Web.HttpApplication.ExecuteStepImpl (шаг IExecutionStep) +220 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и выполнено синхронно) +94

2 ответа

Решение

Прочитав эту статью, я узнал, что эта проблема связана с доступом к профилю пользователя. Однако настройки пула приложений показывают, что вы даже не загружаете профиль пользователя, что, вероятно, является причиной вашей проблемы.

В настройках пула приложений включите "Загрузить профиль пользователя".

Этот ответ и комментарий на этом ответ подтвердить.

Я не совсем уверен, почему он генерирует это исключение, не включая его, и почему только с двумя рабочими процессами. Мне это тоже интересно. Скорее всего, это как-то связано с тем, какие кусты реестра передаются процессу, когда это не собственный куст реестра пользователя, и что закрывается, когда один рабочий процесс завершает работу, что предотвращает доступ к другому процессу. Просто предположение.

Я обнаружил проблему, но не знаю, почему это происходит. На максимальном количестве рабочих процессов было установлено значение 2. Но почему это проблема для этого запроса AD?

Другие вопросы по тегам