【发布时间】:2021-11-26 08:13:51
【问题描述】:
我在 .net 核心中找不到任何有关 LdapConnection 绑定超时的信息。一种解决方案是LdapConnection Bind Timeout,但它不适用于 .net 核心。 LdapConnection 超时和绑定超时似乎是不同的事情。 我的代码类似于以下
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() 方法的调用会无限期等待
【问题讨论】:
-
有人可以帮我吗?
-
不清楚你想用超时做什么。 " LDAP 服务器在随机时间间隔不可用。" 如果您的 ldap 服务器不稳定,这是首先要解决的问题。我会尝试 1. ssh 到运行 slapd 的机器,然后以随机时间间隔 ldapwhoami 并检查响应时间,如果可以,然后 2. ssh 到运行 .net 的机器并做同样的事情,或者只是 telnet ldap 并再次检查响应时间,看看是服务器问题还是网络问题。
-
我的简单问题是在绑定期间不应该有无限的等待时间。应该有一些绑定超时属性可以在内部完成。您可以通过 dllimport 查看引用的帖子。 telnet 到机器是我也会做的一种解决方法,但这意味着在每次通话之前我必须先 telnet 然后进行实际通话。有时我们得到的 ldpa 服务器 url 不是 ip 格式。然后会有额外的工作。帖子中添加了一些其他详细信息
-
好的。设置超时是一回事,但它不会阻止根本问题,我的建议只是为了帮助解决问题,它们不是解决方法。
-
通过设置超时,我的 api 调用将有一些最大时间间隔来获得响应。无限期的绑定等待是一种阻碍。