首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LDAPConnection内核中的.net绑定超时

LDAPConnection内核中的.net绑定超时
EN

Stack Overflow用户
提问于 2021-11-26 08:13:51
回答 1查看 187关注 0票数 0

我无法在LdapConnection内核中找到任何用于.net绑定超时的内容。一种解决方案是LdapConnection Bind Timeout,但它不适用于.net核心。LdapConnection超时和绑定超时似乎不同。我的代码如下所示

代码语言:javascript
复制
   var credentials = new NetworkCredential(obj.AdminBindUserName, obj.AdminBindPassword);

            if (obj.LDAPAddressPort.HasValue && obj.LDAPAddressPort > 0)
            {
                connection = new LdapConnection(new LdapDirectoryIdentifier(obj.LDAPAddress, obj.LDAPAddressPort.Value, false, false));
                //connection = new LdapConnection(new LdapDirectoryIdentifier(obj.LDAPAddress, obj.LDAPAddressPort));connection = new LdapConnection(new LdapDirectoryIdentifier(obj.LDAPAddress, obj.LDAPAddressPort));
            }
            else
            {
                connection = new LdapConnection(obj.LDAPAddress);
            }
             //connection.Timeout = new TimeSpan(0,0,5);   
            connection.SessionOptions.ProtocolVersion = 3;
            connection.AuthType = AuthType.Basic;           
            connection.Bind(credentials);

我尝试过连接超时,但看起来没有效果。我收到异常消息ExceptionCode: 81,消息: LDAP服务器在任意时间间隔不可用。有时18秒,有时超过一分钟。我正在通过vpn连接复制这个问题。我的本地ldap是通过首先连接到某个vpn连接的。有了vpn连接,每件事都能正常工作。但是没有vpn,我对Bind()方法的调用将无限期地等待

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 07:34:11

可以使用任务设置超时,一旦达到第二个超时,就会发生取消事件,以便退出,如下所示

代码语言:javascript
复制
if (obj.IsBindTimeLimit)
            {
                int timeoutSecond = obj.BindTimeOutInSeconds;
                if (timeoutSecond <= 0)
                {
                    timeoutSecond = 5;
                }
                CancellationToken tscancel = new CancellationToken();
                Task t = Task.Run(() =>
                {
                    var credentials = new NetworkCredential(obj.AdminBindUserName, obj.AdminBindPassword);
                    if (obj.LDAPAddressPort.HasValue && obj.LDAPAddressPort > 0)
                    {
                        connection = new LdapConnection(new LdapDirectoryIdentifier(obj.LDAPAddress, obj.LDAPAddressPort.Value, false, false));
                    }
                    else
                    {
                        connection = new LdapConnection(obj.LDAPAddress);
                    }                  
                    connection.SessionOptions.ProtocolVersion = 3;
                    connection.AuthType = AuthType.Basic;
                    connection.Bind(credentials);
                });
              
                if (!t.Wait(timeoutSecond * 1000, tscancel))
                {                    
                    throw new TimeoutException("The timeout interval elapsed");
                }

            }
            else
            {
                var credentials = new NetworkCredential(obj.AdminBindUserName, obj.AdminBindPassword);
                if (obj.LDAPAddressPort.HasValue && obj.LDAPAddressPort > 0)
                {
                    connection = new LdapConnection(new LdapDirectoryIdentifier(obj.LDAPAddress, obj.LDAPAddressPort.Value, false, false));
                }
                else
                {
                    connection = new LdapConnection(obj.LDAPAddress);
                }               
                connection.SessionOptions.ProtocolVersion = 3;
                connection.AuthType = AuthType.Basic;
                connection.Bind(credentials);
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70121299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档