Получите группы AD с ASP. NET WebAPI C#, не работающим на Windows Server 2016 Datacenter - PullRequest
0 голосов
/ 08 января 2020

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

Это работало на Dev. P C (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 Datacenter версии 10.0.14393 Build 14393

Установлено. NET Framework (Server 2016). NET Framework 4.8 Используется. NET Framework 7

У кого-то есть идея, в чем может быть проблема? Спасибо

Добавлено: 08.01.2020 16:11 (UT C +1)

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

Сведения об исключении: System.Runtime.InteropServices.COMException: Нелегальная операция с ключом реестра, помеченным для удаления.

Ошибка источника:

Произошло необработанное исключение генерируется во время выполнения текущего веб-запроса. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[COMException (0x800703fa): Попытка недопустимой операции с ключом реестра, который был помечены для удаления. ]
System.DirectoryServices.DirectoryEntry.Bind (Boolean throwIfFail) +535 System.DirectoryServices.DirectoryEntry.Bind () + 48
System.DirectoryServices.DirectoryEntry.get_AdsObject () + 43
System.DirectoryServices.CpertyVol. .PopulateList () + 27
System.DirectoryServices.PropertyValueCollection..ctor (запись DirectoryEntry, имя свойства String) + 122
System.DirectoryServices.PropertyCollection.get_Item (имя свойства String) + 168
System.DirectoryServices.DirectoryE .Bind (Boolean throwIfFail) +194 System.DirectoryServices.DirectoryEntry.Bind () + 48
System.DirectoryServices.DirectoryEntry.get_AdsObject () + 43
System.DirectoryServices.DirectorySearcher.FindAll * 91 (логическое значение findMoreThanO) 1041 * System.DirectoryServices.DirectorySearcher.FindOne () + 46
FragranceStudio.Webservice.Common.Helper.ActiveDirectoryHelper.SetADInformationToFragranceStudioPrincipal (FragranceStudioPriincipal \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice.Common \ Helper \ ActiveDirectoryHelper.cs: 70 FragranceStudio.Webservice.Common.Security. .Common.Security \ ExtendedPermissionProvider.cs: 142

[FragranceStudioException: произошла неизвестная ошибка. Пожалуйста, попробуйте еще раз или обратитесь в службу поддержки.]
FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.ReloadInheritedPermissionGroups (FragranceStudioPrincipal принципал) в C: \ Repositories \ VS2017 \ FragranceStudio \ FragranceStrovP.Pervice.Somdio.Pervice.Sudio.Sudio.Sudio.Sudio.SudioPudio \ .cs: ​​169 FragranceStudio.Webservice.Common.Security.ExtendedPermissionProvider.GetInheritedGroups (принципал FragranceStudioPrincipal) в C: \ Repositories \ VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Wrancecs.dio 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_PostAutureRevent) VS2017 \ FragranceStudio \ FragranceStudio \ FragranceStudio.Webservice \ Global.asax.cs: 51 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +223 System.Web. .Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) + 94

Ответы [ 2 ]

1 голос
/ 08 января 2020

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

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

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

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

0 голосов
/ 08 января 2020

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

enter image description here

...