Подтвердить что ты не робот

FindByIdentity - отличия в производительности

Следующий код отлично работает с различными компьютерами в нашем домене.

var context = new PrincipalContext(ContextType.Domain);
var principal = UserPrincipal.FindByIdentity(context, @"domain\username")

Однако, если я запустил этот похожий код на компьютере, который не находится в домене, он работает, но строка FindByIdentity занимает 2 + секунды.

var context = new PrincipalContext(ContextType.Machine);
var principal = UserPrincipal.FindByIdentity(context, @"machinename\username")

Можно ли устранить эту разницу в производительности путем предоставления специальных параметров конструктору PrincipalContext и/или методу FindByIdentity? Есть ли настройка в IIS или Windows, которая может быть изменена?

По крайней мере, может кто-нибудь сказать мне, почему это может быть медленнее во втором сценарии?

Код запускается из приложения ASP.NET MVC 3, размещенного в IIS 7.5 (Integrated Pipeline) на Windows Server 2008 R2.

4b9b3361

Ответ 1

У меня была та же проблема. Попробуйте приведенный ниже код кода. Я не знаю, почему, но это намного быстрее (игнорируйте первый раз медленный логин после сборки в VS - последующие логины являются быстрыми). См. Аналогичный вопрос SO Почему использование PrincipalSearcher будет быстрее, чем FindByIdentity()?

var context = new PrincipalContext( ContextType.Machine );
var user = new UserPrincipal(context);
user.SamAccountName = username;
var searcher = new PrincipalSearcher(user);
user = searcher.FindOne() as UserPrincipal;

Основная проблема может иметь отношение к вызовам netBios. См. ADLDS очень медленно (roundtrip to\Server *\MAILSLOT\NET\NETLOGON)