应用程序可以创建一次PrincipalContext
,然后在应用程序的生命周期内重用它吗?这样可以避免在每次调用Active Directory之前使用相同的详细信息重新创建PrincipalContext
的性能。
PrincipalContext
可以进入不再有效的状态吗?
答案 0 :(得分:1)
只要您没有访问PrincipalContext
或多个线程从中获取的对象,您就应该能够在应用程序的整个生命周期内保持相同的上下文。
答案 1 :(得分:0)
该类或其文档的性质没有任何内容表明它的生命周期有限。
MSDN没有提到它是线程安全的,但我无法发现任何可变的属性或方法会改变对象状态(编辑:除了Dispose()
方法),这基本上表明在多个线程中使用可能没问题。虽然底层的Getters或方法可以返回线程上下文结果,这可能不是您所追求的行为。
编辑:
我引用MSDN杂志2008年1月(.NET 3.5),我怀疑这已经改变了
在.NET Framework 3.5中,AccountManagement提供了强大功能 和ActiveDirectoryMembershipProvider提供的易用性 在ASP.NET中实现在任何环境中工作的程序员。 此外,AccountManagement命名空间允许您 如果需要,请对本地SAM数据库进行身份验证。
PrincipalContext类上的两个ValidateCredentials方法 提供凭证验证。首先创建一个实例 PrincipalContext使用您要验证的目录和 指定适当的选项。获得上下文后,进行测试 ValidateCredentials是否返回true或false 提供的用户名和密码值。图12显示了一个例子 在AD LDS中验证用户。
图12在AD LDS中验证用户(关闭图12)// 使用AD LDS建立上下文PrincipalContext ldsContext = 新的PrincipalContext( ContextType.ApplicationDirectory, “sea-dc-02.fabrikam.com:50000” “ou = ADAM用户,O = Microsoft,C = US”);
//确定用户是否可以验证目录 Console.WriteLine( ldsContext.ValidateCredentials( “USER1 @亚当”, “密码1”, ContextOptions.SimpleBind + ContextOptions.SecureSocketLayer));
当您想要验证许多不同的方法时,此方法最有用 快速有效地设置用户凭证。 您创建一个 有问题的目录存储的PrincipalContext对象并重用 每次调用ValidateCredentials时的对象实例。在强> PrincipalContext可以重用与目录的连接, 可带来良好的性能和可扩展性。并致电 ValidateCredentials是线程安全的,因此可以使用您的实例 跨线程执行此操作。重要的是要注意到 用于创建PrincipalContext的凭据不会更改 调用ValidateCredentials - 上下文和方法调用维护 单独的连接。