Как связать асинхронно с LdapConnection

При асинхронном запросе выполнения операций LDAP через BeginSendRequest а также EndSendRequest довольно просто, я не смог определить, как процесс привязки может выполняться асинхронно.

Есть ли возможность связать асинхронно с LdapConnection SDS.P

1 ответ

Искал асинхронные операции LDAP и нашел этот вопрос без ответа. В итоге сам разобрался:

Предполагая, что вы также хотите отправлять/получать запрос LDAP асинхронно после привязки (не знаю, зачем еще вам может понадобиться привязка), вы можете использовать свойство AutoBind в LdapConnection и заранее указать учетные данные в конструкторе для достижения «асинхронной привязки». , используя BeginSendRequest()/EndSendRequest() и позволяя ему обрабатывать Bind внутри, асинхронным образом.

      using System.DirectoryServices.Protocols;
using System.Net;
using System.Threading.Tasks;

// ...

using (var connection = 
    new LdapConnection(
        new LdapDirectoryIdentifier("fqdn.example.com", true, false),
        new NetworkCredential("someuser", "somepassword"),
        AuthType.Basic))
{
    // The Answer...
    connection.AutoBind = true;

    var searchResult = await Task.Factory.FromAsync(
            connection.BeginSendRequest, 
            connection.EndSendRequest,
            new SearchRequest(
                "DC=example,DC=com",
                "(objectClass=user)",
                SearchScope.Subtree,
                "distinguishedname"), 
            PartialResultProcessing.NoPartialResultSupport, 
            null);

    // Profit
}

Для краткости я поместил старые методы модели асинхронного программирования (APM) в LdapConnection в удобный метод-оболочку, предоставленный для асинхронного шаблона на основе задач (TAP), чтобы его можно было просто ожидать, как и ожидалось в современных проектах .Net. См.: https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types .

На самом деле не отвечает точно на вопрос, но показывает, что вам действительно не нужно явно привязываться самостоятельно, и, возможно, именно поэтому MS не удосужилась добавить BeginBind() и т. д. Надеюсь, это поможет следующему усталому программисту, борющемуся с взаимодействием LDAP кто сталкивается с этим.

Другие вопросы по тегам