Similar Issue with workaround, but not actual solution to existing problem
Similar issue pointing to Microsoft End Point update as culprit
Вышеуказанные ссылки являются наиболее подходит для моей проблемы, я также рассматривать каждый подобный вопрос, указанный на переполнение стека при создавая этот пост, и только мои вопросы, упомянутые выше, соответствуют моей проблеме.
фона:
Я использую UserPrincipal.GetAuthorizationGroups
разрешений для конкретного хода доступа к странице IIS 7.5 на сервере 2008 R2 в веб-форм сайта в C# .NET 4.0 для 2 с половиной лет. 15 мая 2013 года мы удалили основной контроллер домена, работающий под управлением Server 2008 (а не r2), и заменили его контроллером домена Server 2012. На следующий день мы начали получать исключение, указанное ниже.
Я использую основной контекст для проверки подлинности форм. Успешное совпадение с именем пользователя/сеансом успешно завершено, и файл cookie auth установлен правильно, но последующий вызов основного контекста, который также вызывает UserPrincipal.GetAuthorizationGroups
, прерывается с перерывами. Мы решили несколько проблем BPA, появившихся в контроллере домена Server 2012, но это еще не решило проблему. Я также создал cron, который работает на двух отдельных серверах. Два сервера будут сбой в решении группы SID в разное время, хотя они работают с одинаковой базой кода. (Среда разработки и производственная среда).
Проблема временно разрешается при перезагрузке веб-сервера, а также на dev-сервере он разрешится после 12 часов работы. Рабочий сервер обычно перестает нормально функционировать до перезагрузки без разрешения.
На данный момент я пытаюсь уточнить привязку к конкретным контроллерам домена в сети, а также новый DC и использовать стандартный запрос LDAP, который в настоящее время не дает больше целевых исключений. До сих пор мы обнаружили на одном веб-сервере, что в дни, когда он терпит неудачу, нет шаблона, но он восстановится примерно через 12 часов. Последние результаты показывают сбой разрешения SID группы между 8 AM-8PM, после чего он восстанавливается, через несколько дней он будет терпеть неудачу в 8 вечера и восстанавливаться с 8 утра, а затем работать нормально еще на 12 часов и снова сбой. Мы надеемся выяснить, является ли это просто проблемой связи с конкретным сервером или чтобы убедиться, что это весь набор контроллеров домена.
Исключение:
Exception information:
Exception type: PrincipalOperationException
Exception message: An error (1301) occurred while enumerating the groups.
The group's SID could not be resolved.
at System.DirectoryServices.AccountManagement.SidList.TranslateSids(String target, IntPtr[] pSids)
at System.DirectoryServices.AccountManagement.SidList..ctor(SID_AND_ATTR[] sidAndAttr)
at System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase)
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p)
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()
Вопрос:
Учитывая вышеизложенную информацию, есть ли какой-либо идеи, почему вывод из эксплуатации Windows Server 2008 (не R2) и реализующей новый сервер 2012 DC приведет к ошибке UserPrincipal.GetAuthorizationGroups
с ошибкой разрешения 1301 SID? Также были бы оценены идеи по устранению возможных причин.
Отказ от ответственности:
Это мой первый пост на переполнение стека, я часто исследования здесь, но не не присоединились к дискуссии до сих пор. Простите меня, если я должен был опубликовать в другом месте и не стесняйтесь указывать лучшие шаги перед публикацией.
UPDATE 13-JUN-2013:
С 12 июня я обратился возможность пунктов не выбывших причиной проблемы. Временные рамки были слишком короткими, чтобы определить, исправил ли исправленный код проблему, но я буду продолжать обновляться по мере того, как мы работаем над разрешением, которое, возможно, с какой-либо удачей кто-то здесь может протянуть руку.
Оригинальный код
public bool isGroupMember(string userName, ArrayList groupList)
{
bool valid = false;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain_server + ".domain.org:636", null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
// find the user in the identity store
UserPrincipal user =
UserPrincipal.FindByIdentity(
ctx,
userName);
// get the groups for the user principal and
// store the results in a PrincipalSearchResult object
PrincipalSearchResult<Principal> groups =
user.GetAuthorizationGroups();
// display the names of the groups to which the
// user belongs
foreach (Principal group in groups)
{
foreach (string groupName in groupList)
{
if (group.ToString() == groupName)
{
valid = true;
}
}
}
return valid;
}
Обновленный код
public bool isGroupMember(string userName, ArrayList groupList, string domain_server)
{
bool valid = false;
try
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain_server + ".domain.org:636", null, ContextOptions.Negotiate | ContextOptions.SecureSocketLayer))
{
// find the user in the identity store
UserPrincipal user =
UserPrincipal.FindByIdentity(
ctx,
userName);
try
{
// get the groups for the user principal and
// store the results in a PrincipalSearchResult object
using (PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups())
{
// display the names of the groups to which the
// user belongs
foreach (Principal group in groups)
{
foreach (string groupName in groupList)
{
if (group.ToString() == groupName)
{
valid = true;
}
}
group.Dispose();
}
}//end using-2
}
catch
{
log_gen("arbitrary info");
return false;
}
}//end using-1
}
catch
{
log_gen("arbitrary info");
return false;
}
return valid;
}
** Обновление: ** Там может быть проблема с утилизацией не PrincipalSearchResult. Хотя я не уверен, почему это было бы сейчас проблемой через два года. В настоящее время я включаю элементы iEnumerable в [using] заявлениях, пытаясь отследить проблемы через perfmon. [Ресурс на утечку] (http://stackoverflow.com/questions/10715159/does-principalsearchresultt-automatically-dispose-all-elements-in-its-collecti) – Pynt
** Обновление: ** Все еще было несколько бит которые не были правильно утилизированы. Обновлено сегодня и будет продолжать следить за проблемой. Сбой перечисления группы SID происходил каждые 12 часов в выходные дни и разрешался каждые 12 часов. Мы добавили больше переменных в проблему, которые я ошибочно разместил как «14 мая», но на самом деле начали «16 мая», на 15-м обновлении Windows было установлено множество обновлений .NET. – Pynt
** Обновление: ** Рефакторинг большого кода, поскольку я больше узнаю о правильной утилизации. Я по-прежнему новичок в C# и унаследовал этот проект, поэтому хороший бит для обновления. Проблема все еще происходит, и я все еще оптимизирую код, надеясь на лучшее. В какой-то момент я откажусь от обновлений .NET, которые были установлены 15 мая, и посмотрите, не исчезли ли вещи, но пока я продолжу исправлять плохо реализованный код. – Pynt