2-5秒。初始执??行后,后续执行会在大约45秒内完成。经过那段快速执行后,下一次执行将被延迟,所有后续执行将立即完成。似乎正在进行某种缓存,但我找不到任何资源来确认或描述导致初始延迟的原因。我们在客户端Windows2008服务器上注意到了这一点,然后在我们自己的Windows2008和Windows7机器上重现了这一点。这是我的简单.NET4.0C#应用程序的样子。延迟发生在“开始”和“完成”消息之间。知道为什么这种延迟发生在初始FindOne()执行时吗?非常感谢任何帮助!使用System.Collections.Generic;使用系统文本;使用System.DirectoryServices;namespaceLdapTest{classProgram{staticvoidMain(string[]args){string[]fetchAttributes;fetchAttributes=newstring[]{"{string[0]}"};使用(DirectoryEntrysearchRoot=newDirectoryEntry("LDAP://localserver/ou=lab,dc=ourdomain,dc=com","cn=binduser,ou=Services,dc=ourdomain,dc=com","密码",AuthenticationTypes.ReadonlyServer)){使用(DirectorySearchersearcher=newDirectorySearcher(searchRoot,"(sAMAccountName=UserName)",fetchAttributes,SearchScope.Subtree)){Console.WriteLine("Started");SearchResult结果=searcher.FindOne();Console.WriteLine("完成");}}}}根据LDAPADsPathMSDN文章,如果绑定LDAP路径指向服务器以避免不必要的网络流量,则应指定ServerBind标志。它还建议提供服务器的完整DNS名称。此外,ReadonlyServer标志在指向服务器时没有任何意义。所以我的第一个建议是用ServerBind替换ReadonlyServer标志(最好给出完整的DNS名称),或者删除字符串的服务器部分(在您的情况下,使其成为LDAP://ou=lab,dc=ourdomain,dc=com或LDAP://ourdomain.com/ou=lab,dc=ourdomain,dc=com)。另一件需要注意的事情是您通过专有名称提供用户名。如果您查看DirectoryEntry使用的核心APIIADsOpenDSObject::OpenDSObject,它需要lpReserved标志[DirectoryEntry中的AuthenticationTypes参数]为零[None]或在传递用户名的可分辨名称时包含ADS_USE_SSL[SecureSocketsLayer]标志.请注意,SecureSocketsLayer标志要求ActiveDirectory要求在使用此标志之前安装证书服务器。您可能希望以其他格式传递用户名。最后,这个MDSN页面说没有任何身份验证标志,用户名和密码将以明文形式发送。您应该添加安全标志。以上就是C#学习教程的全部内容:DirectorySearcherFindOne()初始执行时延迟分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
