当前位置: 首页 > 编程语言 > C#

C#LDAP性能分享

时间:2023-04-10 20:11:29 C#

C#LDAP性能在我工作的地方,我们有两种身份验证模式:CAS是主要方法,但在高峰时段通常不可靠,所以当我们注意到CAS宕机时,我们一直在使用LDAP作为后备架构。之前,我们使用PHP执行LDAP回退并获得了合理的性能。除了预期的网络延迟外,登录期间没有明显的延迟。使用LDAP完成登录大约需要250-500毫秒。现在我们正在创建一个新系统并选择ASP.NETMVC4作为平台而不是PHP,我的任务是尝试让这个回退再次工作。我已经拔了大约6个小时的头发,现在一遍又一遍地尝试不同的东西,结果都是一样的(也许我疯了)。我终于设法连接到LDAP,对用户进行身份验证,并从LDAP获取他们的属性。但是,无论我尝试什么,查询总是需要4.5秒才能完成。这让我很惊讶,因为PHP版本能够在1/8的时间内完成几乎相同的事情,而且.NET框架似乎对LDAP/ActiveDirectory有很好的支持。我做错了什么吗?这是我现在正在运行的功能(这是最新的迭代,可以在一个4.5秒的查询中完成所有操作):publicModels.CASAttributesAuthenticate(stringusername,stringpwd){0},ou=People,o=byu.edu",用户名);LdapDirectoryIdentifier标识符=newLdapDirectoryIdentifier("ldap.byu.edu",636,false,false);尝试使用(LdapConnection连接=newLdapConnection(标识符)){connection.Credential=newNetworkCredential(uid,pwd);connection.AuthType=AuthType.Basic;connection.SessionOptions.SecureSocketLayer=true;connection.SessionOptions.ProtocolVersion=3;字符串过滤器="(uid="+用户名+")";SearchRequestrequest=newSearchRequest("ou=People,o=byu.edu",filter,SearchScope.Subtree);秒表sw=Stopwatch.StartNew();SearchResponseresponse=connection.SendRequest(request)asSearchResponse;sw.停止();Debug.WriteLine(sw.ElapsedMilliseconds);foreach(SearchResultEntryentryinresponse.Entries){Debug.WriteLine(entry.Distinguished名称);foreach(System.Collections.DictionaryEntryattributeinentry.Attributes){Debug.WriteLine(attribute.Key+""+attribute.Value.GetType().ToString());}Debug.WriteLine("");}}}catch{Debugger.Break();}Debugger.Break();返回空值;//debug}PHP版本遵循以下顺序:匿名绑定并使用basedn和cn查找用户信息使用用户的用户名和密码再次绑定,看他们是否可以信任它在1/8中执行两次绑定(连接?).NET版本只做一次!这种事情让我觉得我错过了一些我尝试过基于以下网站的方法:编辑:使用wireshark,我看到以下请求:bindRequestpassingmyuid(delta0.7ms)bindResponsesuccess(delta2ms)searchRequest"ou=People,o=byu.edu"wholdSubtree(delta0.2ms)searchResEntry"uid=myuid,ou=People,o=byu.edu"|searchResDoneSuccess1result(delta10.8ms)unbindRequest(delta55.7ms)显然,开销来自.NET,而不是来自Requests。这些不会以任何方式、形状或形式加起来达到4.5秒。ldap.byu.edu看起来绝对像是一个完全合格的DNS主机名。您应该将LdapDirectoryIdentifier构造函数更改为newLdapDirectoryIdentifier("ldap.byu.edu",636,true,false)。我认为您使用System.DirectoryServices肯定是在正确的轨道上,因此您可能只需要稍微调整一下搜索请求。你只想要一个结果,对吧?相应地设置你的尺寸:request.SizeLimit=1;这是一个棘手的问题,但请确保您还抑制了推荐的绑定。调用connection.SendRequest(request)前需要设置:以上就是《C#学习教程:C#LDAP性能分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——//设置DomainScope会抑制在搜索过程中发生referralbindsSearchOptionsControlSuppressReferrals=newSearchOptionsControl(SearchOption.DomainScope);request.Controls.Add(SuppressReferrals);联系管理员删除。如需转载请注明出处: