以下代码可在我们域中的各种计算机上正常运行。

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中是否有可以调整的设置?

至少,有人可以告诉我为什么在第二种情况下它会变慢吗?

该代码是从Windows Server 2008 R2的IIS 7.5(集成管道)中托管的ASP.NET MVC 3应用程序运行的。

最佳答案

我有同样的问题。尝试下面的代码块。我不知道为什么,但是它要快得多(忽略在VS中构建后的第一次慢速登录-后续登录很快)。看到类似的问题Why would using PrincipalSearcher be faster than 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 very slow (roundtrip to \Server*\MAILSLOT\NET\NETLOGON)

07-27 13:26