Added retry logic to ConnectAndBind

This commit is contained in:
2025-10-08 22:56:45 +02:00
parent 45f9f5a2bf
commit bd72b1075a
2 changed files with 27 additions and 6 deletions

View File

@@ -23,19 +23,39 @@ public partial class LdapService : IDisposable
private async Task ConnectAndBind()
{
if (!_conn.Connected)
int retries = 0;
while (retries++ < _opts.ConnectionRetryCount)
{
try
{
await _conn.ConnectAsync(_opts.Host, _opts.Port);
if (!_conn.Connected)
{
try
{
await _conn.ConnectAsync(_opts.Host, _opts.Port);
}
catch (SystemException ex)
{
_logger.LogWarning("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
throw;
}
}
await _conn.BindAsync(_opts.BindDn, _opts.BindPassword);
return;
}
catch (SystemException ex)
catch (Exception ex)
{
_logger.LogCritical("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
throw;
if (retries == _opts.ConnectionRetryCount)
{
_logger.LogError("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
throw;
}
else
{
_logger.LogWarning("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
}
}
}
await _conn.BindAsync(_opts.BindDn, _opts.BindPassword);
}
public string AssetsBaseDn => string.IsNullOrEmpty(_opts.AssetsOu) ? _opts.BaseDn : $"{_opts.AssetsOu},{_opts.BaseDn}";