我无法在LdapConnection内核中找到任何用于.net绑定超时的内容。一种解决方案是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()方法的调用将无限期地等待
发布于 2021-11-30 07:34:11
可以使用任务设置超时,一旦达到第二个超时,就会发生取消事件,以便退出,如下所示
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);
}https://stackoverflow.com/questions/70121299
复制相似问题